@expo/entity 0.41.0 → 0.43.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
@@ -13,10 +13,11 @@ import EntityPrivacyPolicy, {
13
13
  } from '../EntityPrivacyPolicy';
14
14
  import { EntityTransactionalQueryContext, EntityQueryContext } from '../EntityQueryContext';
15
15
  import { CacheStatus } from '../internal/ReadThroughEntityCache';
16
+ import { SingleFieldHolder, SingleFieldValueHolder } from '../internal/SingleFieldHolder';
16
17
  import PrivacyPolicyRule, { RuleEvaluationResult } from '../rules/PrivacyPolicyRule';
17
- import TestViewerContext from '../testfixtures/TestViewerContext';
18
- import { InMemoryFullCacheStubCacheAdapter } from '../utils/testing/StubCacheAdapter';
19
- import { createUnitTestEntityCompanionProvider } from '../utils/testing/createUnitTestEntityCompanionProvider';
18
+ import { InMemoryFullCacheStubCacheAdapter } from '../utils/__testfixtures__/StubCacheAdapter';
19
+ import TestViewerContext from '../utils/__testfixtures__/TestViewerContext';
20
+ import { createUnitTestEntityCompanionProvider } from '../utils/__testfixtures__/createUnitTestEntityCompanionProvider';
20
21
 
21
22
  interface OtherFields {
22
23
  id: string;
@@ -73,7 +74,7 @@ const makeEntityClasses = (edgeDeletionBehavior: EntityEdgeDeletionBehavior) =>
73
74
 
74
75
  class AlwaysAllowPrivacyPolicyRuleThatRecords extends PrivacyPolicyRule<
75
76
  any,
76
- string,
77
+ 'id',
77
78
  TestViewerContext,
78
79
  any,
79
80
  any
@@ -87,7 +88,7 @@ const makeEntityClasses = (edgeDeletionBehavior: EntityEdgeDeletionBehavior) =>
87
88
  _queryContext: EntityQueryContext,
88
89
  evaluationContext: EntityPrivacyPolicyEvaluationContext<
89
90
  any,
90
- string,
91
+ 'id',
91
92
  TestViewerContext,
92
93
  any,
93
94
  any
@@ -105,7 +106,7 @@ const makeEntityClasses = (edgeDeletionBehavior: EntityEdgeDeletionBehavior) =>
105
106
 
106
107
  class TestEntityPrivacyPolicy extends EntityPrivacyPolicy<
107
108
  any,
108
- string,
109
+ 'id',
109
110
  TestViewerContext,
110
111
  any,
111
112
  any
@@ -126,7 +127,7 @@ const makeEntityClasses = (edgeDeletionBehavior: EntityEdgeDeletionBehavior) =>
126
127
 
127
128
  class ParentCheckInfoDeletionTrigger extends EntityMutationTrigger<
128
129
  ParentFields,
129
- string,
130
+ 'id',
130
131
  TestViewerContext,
131
132
  ParentEntity
132
133
  > {
@@ -134,12 +135,7 @@ const makeEntityClasses = (edgeDeletionBehavior: EntityEdgeDeletionBehavior) =>
134
135
  _viewerContext: TestViewerContext,
135
136
  _queryContext: EntityTransactionalQueryContext,
136
137
  _entity: ParentEntity,
137
- mutationInfo: EntityTriggerMutationInfo<
138
- ParentFields,
139
- string,
140
- TestViewerContext,
141
- ParentEntity
142
- >,
138
+ mutationInfo: EntityTriggerMutationInfo<ParentFields, 'id', TestViewerContext, ParentEntity>,
143
139
  ): Promise<void> {
144
140
  invariant(mutationInfo.type === EntityMutationType.DELETE, 'invalid EntityMutationType');
145
141
  if (mutationInfo.cascadingDeleteCause !== null) {
@@ -152,7 +148,7 @@ const makeEntityClasses = (edgeDeletionBehavior: EntityEdgeDeletionBehavior) =>
152
148
 
153
149
  class ParentCheckInfoUpdateTrigger extends EntityMutationTrigger<
154
150
  ParentFields,
155
- string,
151
+ 'id',
156
152
  TestViewerContext,
157
153
  ParentEntity
158
154
  > {
@@ -160,12 +156,7 @@ const makeEntityClasses = (edgeDeletionBehavior: EntityEdgeDeletionBehavior) =>
160
156
  _viewerContext: TestViewerContext,
161
157
  _queryContext: EntityTransactionalQueryContext,
162
158
  _entity: ParentEntity,
163
- mutationInfo: EntityTriggerMutationInfo<
164
- ParentFields,
165
- string,
166
- TestViewerContext,
167
- ParentEntity
168
- >,
159
+ mutationInfo: EntityTriggerMutationInfo<ParentFields, 'id', TestViewerContext, ParentEntity>,
169
160
  ): Promise<void> {
170
161
  invariant(mutationInfo.type === EntityMutationType.UPDATE, 'invalid EntityMutationType');
171
162
  if (mutationInfo.cascadingDeleteCause !== null) {
@@ -178,7 +169,7 @@ const makeEntityClasses = (edgeDeletionBehavior: EntityEdgeDeletionBehavior) =>
178
169
 
179
170
  class ChildCheckInfoDeletionTrigger extends EntityMutationTrigger<
180
171
  ChildFields,
181
- string,
172
+ 'id',
182
173
  TestViewerContext,
183
174
  ChildEntity
184
175
  > {
@@ -186,7 +177,7 @@ const makeEntityClasses = (edgeDeletionBehavior: EntityEdgeDeletionBehavior) =>
186
177
  _viewerContext: TestViewerContext,
187
178
  _queryContext: EntityTransactionalQueryContext,
188
179
  _entity: ChildEntity,
189
- mutationInfo: EntityTriggerMutationInfo<ChildFields, string, TestViewerContext, ChildEntity>,
180
+ mutationInfo: EntityTriggerMutationInfo<ChildFields, 'id', TestViewerContext, ChildEntity>,
190
181
  ): Promise<void> {
191
182
  invariant(mutationInfo.type === EntityMutationType.DELETE, 'invalid EntityMutationType');
192
183
  if (mutationInfo.cascadingDeleteCause === null) {
@@ -210,7 +201,7 @@ const makeEntityClasses = (edgeDeletionBehavior: EntityEdgeDeletionBehavior) =>
210
201
 
211
202
  class ChildCheckInfoUpdateTrigger extends EntityMutationTrigger<
212
203
  ChildFields,
213
- string,
204
+ 'id',
214
205
  TestViewerContext,
215
206
  ChildEntity
216
207
  > {
@@ -218,7 +209,7 @@ const makeEntityClasses = (edgeDeletionBehavior: EntityEdgeDeletionBehavior) =>
218
209
  _viewerContext: TestViewerContext,
219
210
  _queryContext: EntityTransactionalQueryContext,
220
211
  _entity: ChildEntity,
221
- mutationInfo: EntityTriggerMutationInfo<ChildFields, string, TestViewerContext, ChildEntity>,
212
+ mutationInfo: EntityTriggerMutationInfo<ChildFields, 'id', TestViewerContext, ChildEntity>,
222
213
  ): Promise<void> {
223
214
  invariant(mutationInfo.type === EntityMutationType.UPDATE, 'invalid EntityMutationType');
224
215
  if (mutationInfo.cascadingDeleteCause === null) {
@@ -242,7 +233,7 @@ const makeEntityClasses = (edgeDeletionBehavior: EntityEdgeDeletionBehavior) =>
242
233
 
243
234
  class GrandChildCheckInfoDeletionTrigger extends EntityMutationTrigger<
244
235
  GrandChildFields,
245
- string,
236
+ 'id',
246
237
  TestViewerContext,
247
238
  GrandChildEntity
248
239
  > {
@@ -252,7 +243,7 @@ const makeEntityClasses = (edgeDeletionBehavior: EntityEdgeDeletionBehavior) =>
252
243
  _entity: GrandChildEntity,
253
244
  mutationInfo: EntityTriggerMutationInfo<
254
245
  GrandChildFields,
255
- string,
246
+ 'id',
256
247
  TestViewerContext,
257
248
  GrandChildEntity
258
249
  >,
@@ -293,7 +284,7 @@ const makeEntityClasses = (edgeDeletionBehavior: EntityEdgeDeletionBehavior) =>
293
284
 
294
285
  class GrandChildCheckInfoUpdateTrigger extends EntityMutationTrigger<
295
286
  GrandChildFields,
296
- string,
287
+ 'id',
297
288
  TestViewerContext,
298
289
  GrandChildEntity
299
290
  > {
@@ -303,7 +294,7 @@ const makeEntityClasses = (edgeDeletionBehavior: EntityEdgeDeletionBehavior) =>
303
294
  _entity: GrandChildEntity,
304
295
  mutationInfo: EntityTriggerMutationInfo<
305
296
  GrandChildFields,
306
- string,
297
+ 'id',
307
298
  TestViewerContext,
308
299
  GrandChildEntity
309
300
  >,
@@ -342,10 +333,10 @@ const makeEntityClasses = (edgeDeletionBehavior: EntityEdgeDeletionBehavior) =>
342
333
  }
343
334
  }
344
335
 
345
- class OtherEntity extends Entity<OtherFields, string, TestViewerContext> {
336
+ class OtherEntity extends Entity<OtherFields, 'id', TestViewerContext> {
346
337
  static defineCompanionDefinition(): EntityCompanionDefinition<
347
338
  OtherFields,
348
- string,
339
+ 'id',
349
340
  TestViewerContext,
350
341
  OtherEntity,
351
342
  TestEntityPrivacyPolicy
@@ -358,10 +349,10 @@ const makeEntityClasses = (edgeDeletionBehavior: EntityEdgeDeletionBehavior) =>
358
349
  }
359
350
  }
360
351
 
361
- class ParentEntity extends Entity<ParentFields, string, TestViewerContext> {
352
+ class ParentEntity extends Entity<ParentFields, 'id', TestViewerContext> {
362
353
  static defineCompanionDefinition(): EntityCompanionDefinition<
363
354
  ParentFields,
364
- string,
355
+ 'id',
365
356
  TestViewerContext,
366
357
  ParentEntity,
367
358
  TestEntityPrivacyPolicy
@@ -381,10 +372,10 @@ const makeEntityClasses = (edgeDeletionBehavior: EntityEdgeDeletionBehavior) =>
381
372
  }
382
373
  }
383
374
 
384
- class ChildEntity extends Entity<ChildFields, string, TestViewerContext> {
375
+ class ChildEntity extends Entity<ChildFields, 'id', TestViewerContext> {
385
376
  static defineCompanionDefinition(): EntityCompanionDefinition<
386
377
  ChildFields,
387
- string,
378
+ 'id',
388
379
  TestViewerContext,
389
380
  ChildEntity,
390
381
  TestEntityPrivacyPolicy
@@ -404,10 +395,10 @@ const makeEntityClasses = (edgeDeletionBehavior: EntityEdgeDeletionBehavior) =>
404
395
  }
405
396
  }
406
397
 
407
- class GrandChildEntity extends Entity<GrandChildFields, string, TestViewerContext> {
398
+ class GrandChildEntity extends Entity<GrandChildFields, 'id', TestViewerContext> {
408
399
  static defineCompanionDefinition(): EntityCompanionDefinition<
409
400
  GrandChildFields,
410
- string,
401
+ 'id',
411
402
  TestViewerContext,
412
403
  GrandChildEntity,
413
404
  TestEntityPrivacyPolicy
@@ -427,7 +418,7 @@ const makeEntityClasses = (edgeDeletionBehavior: EntityEdgeDeletionBehavior) =>
427
418
  }
428
419
  }
429
420
 
430
- const otherEntityConfiguration = new EntityConfiguration<OtherFields>({
421
+ const otherEntityConfiguration = new EntityConfiguration<OtherFields, 'id'>({
431
422
  idField: 'id',
432
423
  tableName: 'others',
433
424
  schema: {
@@ -440,7 +431,7 @@ const makeEntityClasses = (edgeDeletionBehavior: EntityEdgeDeletionBehavior) =>
440
431
  cacheAdapterFlavor: 'redis',
441
432
  });
442
433
 
443
- const parentEntityConfiguration = new EntityConfiguration<ParentFields>({
434
+ const parentEntityConfiguration = new EntityConfiguration<ParentFields, 'id'>({
444
435
  idField: 'id',
445
436
  tableName: 'parents',
446
437
  inboundEdges: [ChildEntity],
@@ -454,7 +445,7 @@ const makeEntityClasses = (edgeDeletionBehavior: EntityEdgeDeletionBehavior) =>
454
445
  cacheAdapterFlavor: 'redis',
455
446
  });
456
447
 
457
- const childEntityConfiguration = new EntityConfiguration<ChildFields>({
448
+ const childEntityConfiguration = new EntityConfiguration<ChildFields, 'id'>({
458
449
  idField: 'id',
459
450
  tableName: 'children',
460
451
  inboundEdges: [GrandChildEntity],
@@ -484,7 +475,7 @@ const makeEntityClasses = (edgeDeletionBehavior: EntityEdgeDeletionBehavior) =>
484
475
  cacheAdapterFlavor: 'redis',
485
476
  });
486
477
 
487
- const grandChildEntityConfiguration = new EntityConfiguration<GrandChildFields>({
478
+ const grandChildEntityConfiguration = new EntityConfiguration<GrandChildFields, 'id'>({
488
479
  idField: 'id',
489
480
  tableName: 'grandchildren',
490
481
  schema: {
@@ -774,33 +765,50 @@ describe('EntityMutator.processEntityDeletionForInboundEdgesAsync', () => {
774
765
 
775
766
  const childCacheAdapter = viewerContext.getViewerScopedEntityCompanionForClass(ChildEntity)[
776
767
  'entityCompanion'
777
- ]['tableDataCoordinator']['cacheAdapter'] as InMemoryFullCacheStubCacheAdapter<ChildFields>;
778
- const childCachedBefore = await childCacheAdapter.loadManyAsync('parent_id', [
779
- parent.getID(),
780
- ]);
781
- expect(childCachedBefore.get(parent.getID())?.status).toEqual(CacheStatus.HIT);
768
+ ]['tableDataCoordinator']['cacheAdapter'] as InMemoryFullCacheStubCacheAdapter<
769
+ ChildFields,
770
+ 'id'
771
+ >;
772
+ const childCachedBefore = await childCacheAdapter.loadManyAsync(
773
+ new SingleFieldHolder('parent_id'),
774
+ [new SingleFieldValueHolder(parent.getID())],
775
+ );
776
+ expect(childCachedBefore.get(new SingleFieldValueHolder(parent.getID()))?.status).toEqual(
777
+ CacheStatus.HIT,
778
+ );
782
779
 
783
780
  const grandChildCacheAdapter = viewerContext.getViewerScopedEntityCompanionForClass(
784
781
  GrandChildEntity,
785
782
  )['entityCompanion']['tableDataCoordinator'][
786
783
  'cacheAdapter'
787
- ] as InMemoryFullCacheStubCacheAdapter<ChildFields>;
788
- const grandChildCachedBefore = await grandChildCacheAdapter.loadManyAsync('parent_id', [
789
- child.getID(),
790
- ]);
791
- expect(grandChildCachedBefore.get(child.getID())?.status).toEqual(CacheStatus.HIT);
784
+ ] as InMemoryFullCacheStubCacheAdapter<ChildFields, 'id'>;
785
+ const grandChildCachedBefore = await grandChildCacheAdapter.loadManyAsync(
786
+ new SingleFieldHolder('parent_id'),
787
+ [new SingleFieldValueHolder(child.getID())],
788
+ );
789
+ expect(grandChildCachedBefore.get(new SingleFieldValueHolder(child.getID()))?.status).toEqual(
790
+ CacheStatus.HIT,
791
+ );
792
792
 
793
793
  privacyPolicyEvaluationRecords.shouldRecord = true;
794
794
  await ParentEntity.deleter(parent).deleteAsync();
795
795
  privacyPolicyEvaluationRecords.shouldRecord = false;
796
796
 
797
- const childCachedAfter = await childCacheAdapter.loadManyAsync('parent_id', [parent.getID()]);
798
- expect(childCachedAfter.get(parent.getID())?.status).toEqual(CacheStatus.MISS);
797
+ const childCachedAfter = await childCacheAdapter.loadManyAsync(
798
+ new SingleFieldHolder('parent_id'),
799
+ [new SingleFieldValueHolder(parent.getID())],
800
+ );
801
+ expect(childCachedAfter.get(new SingleFieldValueHolder(parent.getID()))?.status).toEqual(
802
+ CacheStatus.MISS,
803
+ );
799
804
 
800
- const grandChildCachedAfter = await grandChildCacheAdapter.loadManyAsync('parent_id', [
801
- child.getID(),
802
- ]);
803
- expect(grandChildCachedAfter.get(child.getID())?.status).toEqual(CacheStatus.HIT);
805
+ const grandChildCachedAfter = await grandChildCacheAdapter.loadManyAsync(
806
+ new SingleFieldHolder('parent_id'),
807
+ [new SingleFieldValueHolder(child.getID())],
808
+ );
809
+ expect(grandChildCachedAfter.get(new SingleFieldValueHolder(child.getID()))?.status).toEqual(
810
+ CacheStatus.HIT,
811
+ );
804
812
 
805
813
  await expect(
806
814
  ParentEntity.loader(viewerContext).loadByIDNullableAsync(parent.getID()),
@@ -907,33 +915,50 @@ describe('EntityMutator.processEntityDeletionForInboundEdgesAsync', () => {
907
915
 
908
916
  const childCacheAdapter = viewerContext.getViewerScopedEntityCompanionForClass(ChildEntity)[
909
917
  'entityCompanion'
910
- ]['tableDataCoordinator']['cacheAdapter'] as InMemoryFullCacheStubCacheAdapter<ChildFields>;
911
- const childCachedBefore = await childCacheAdapter.loadManyAsync('parent_id', [
912
- parent.getID(),
913
- ]);
914
- expect(childCachedBefore.get(parent.getID())?.status).toEqual(CacheStatus.HIT);
918
+ ]['tableDataCoordinator']['cacheAdapter'] as InMemoryFullCacheStubCacheAdapter<
919
+ ChildFields,
920
+ 'id'
921
+ >;
922
+ const childCachedBefore = await childCacheAdapter.loadManyAsync(
923
+ new SingleFieldHolder('parent_id'),
924
+ [new SingleFieldValueHolder(parent.getID())],
925
+ );
926
+ expect(childCachedBefore.get(new SingleFieldValueHolder(parent.getID()))?.status).toEqual(
927
+ CacheStatus.HIT,
928
+ );
915
929
 
916
930
  const grandChildCacheAdapter = viewerContext.getViewerScopedEntityCompanionForClass(
917
931
  GrandChildEntity,
918
932
  )['entityCompanion']['tableDataCoordinator'][
919
933
  'cacheAdapter'
920
- ] as InMemoryFullCacheStubCacheAdapter<ChildFields>;
921
- const grandChildCachedBefore = await grandChildCacheAdapter.loadManyAsync('parent_id', [
922
- child.getID(),
923
- ]);
924
- expect(grandChildCachedBefore.get(child.getID())?.status).toEqual(CacheStatus.HIT);
934
+ ] as InMemoryFullCacheStubCacheAdapter<ChildFields, 'id'>;
935
+ const grandChildCachedBefore = await grandChildCacheAdapter.loadManyAsync(
936
+ new SingleFieldHolder('parent_id'),
937
+ [new SingleFieldValueHolder(child.getID())],
938
+ );
939
+ expect(grandChildCachedBefore.get(new SingleFieldValueHolder(child.getID()))?.status).toEqual(
940
+ CacheStatus.HIT,
941
+ );
925
942
 
926
943
  privacyPolicyEvaluationRecords.shouldRecord = true;
927
944
  await ParentEntity.deleter(parent).deleteAsync();
928
945
  privacyPolicyEvaluationRecords.shouldRecord = false;
929
946
 
930
- const childCachedAfter = await childCacheAdapter.loadManyAsync('parent_id', [parent.getID()]);
931
- expect(childCachedAfter.get(parent.getID())?.status).toEqual(CacheStatus.MISS);
947
+ const childCachedAfter = await childCacheAdapter.loadManyAsync(
948
+ new SingleFieldHolder('parent_id'),
949
+ [new SingleFieldValueHolder(parent.getID())],
950
+ );
951
+ expect(childCachedAfter.get(new SingleFieldValueHolder(parent.getID()))?.status).toEqual(
952
+ CacheStatus.MISS,
953
+ );
932
954
 
933
- const grandChildCachedAfter = await grandChildCacheAdapter.loadManyAsync('parent_id', [
934
- child.getID(),
935
- ]);
936
- expect(grandChildCachedAfter.get(child.getID())?.status).toEqual(CacheStatus.MISS);
955
+ const grandChildCachedAfter = await grandChildCacheAdapter.loadManyAsync(
956
+ new SingleFieldHolder('parent_id'),
957
+ [new SingleFieldValueHolder(child.getID())],
958
+ );
959
+ expect(grandChildCachedAfter.get(new SingleFieldValueHolder(child.getID()))?.status).toEqual(
960
+ CacheStatus.MISS,
961
+ );
937
962
 
938
963
  await expect(
939
964
  ParentEntity.loader(viewerContext).loadByIDNullableAsync(parent.getID()),
@@ -13,9 +13,9 @@ import {
13
13
  EnumField,
14
14
  StrictEnumField,
15
15
  } from '../EntityFields';
16
- import describeFieldTestCase from '../utils/testing/describeFieldTestCase';
16
+ import describeFieldTestCase from '../utils/__testfixtures__/describeFieldTestCase';
17
17
 
18
- class TestFieldDefinition extends EntityFieldDefinition<string> {
18
+ class TestFieldDefinition extends EntityFieldDefinition<string, false> {
19
19
  protected validateInputValueInternal(value: string): boolean {
20
20
  return value === 'helloworld';
21
21
  }
@@ -3,8 +3,8 @@ import EnforcingEntityLoader from '../EnforcingEntityLoader';
3
3
  import EntityLoader from '../EntityLoader';
4
4
  import EntityLoaderUtils from '../EntityLoaderUtils';
5
5
  import ViewerContext from '../ViewerContext';
6
- import SimpleTestEntity from '../testfixtures/SimpleTestEntity';
7
- import { createUnitTestEntityCompanionProvider } from '../utils/testing/createUnitTestEntityCompanionProvider';
6
+ import SimpleTestEntity from '../utils/__testfixtures__/SimpleTestEntity';
7
+ import { createUnitTestEntityCompanionProvider } from '../utils/__testfixtures__/createUnitTestEntityCompanionProvider';
8
8
 
9
9
  describe(EntityLoader, () => {
10
10
  describe('enforcing', () => {
@@ -8,7 +8,7 @@ import EntityMutatorFactory from '../EntityMutatorFactory';
8
8
  import EntityPrivacyPolicy from '../EntityPrivacyPolicy';
9
9
  import ViewerContext from '../ViewerContext';
10
10
  import AlwaysAllowPrivacyPolicyRule from '../rules/AlwaysAllowPrivacyPolicyRule';
11
- import { createUnitTestEntityCompanionProvider } from '../utils/testing/createUnitTestEntityCompanionProvider';
11
+ import { createUnitTestEntityCompanionProvider } from '../utils/__testfixtures__/createUnitTestEntityCompanionProvider';
12
12
 
13
13
  type BlahFields = {
14
14
  id: string;
@@ -16,35 +16,35 @@ type BlahFields = {
16
16
 
17
17
  class BlahEntityPrivacyPolicy extends EntityPrivacyPolicy<
18
18
  BlahFields,
19
- string,
19
+ 'id',
20
20
  ViewerContext,
21
21
  BlahEntity
22
22
  > {
23
23
  protected override readonly createRules = [
24
- new AlwaysAllowPrivacyPolicyRule<BlahFields, string, ViewerContext, BlahEntity>(),
24
+ new AlwaysAllowPrivacyPolicyRule<BlahFields, 'id', ViewerContext, BlahEntity>(),
25
25
  ];
26
26
  protected override readonly readRules = [
27
- new AlwaysAllowPrivacyPolicyRule<BlahFields, string, ViewerContext, BlahEntity>(),
27
+ new AlwaysAllowPrivacyPolicyRule<BlahFields, 'id', ViewerContext, BlahEntity>(),
28
28
  ];
29
29
  protected override readonly updateRules = [
30
- new AlwaysAllowPrivacyPolicyRule<BlahFields, string, ViewerContext, BlahEntity>(),
30
+ new AlwaysAllowPrivacyPolicyRule<BlahFields, 'id', ViewerContext, BlahEntity>(),
31
31
  ];
32
32
  protected override readonly deleteRules = [
33
- new AlwaysAllowPrivacyPolicyRule<BlahFields, string, ViewerContext, BlahEntity>(),
33
+ new AlwaysAllowPrivacyPolicyRule<BlahFields, 'id', ViewerContext, BlahEntity>(),
34
34
  ];
35
35
  }
36
36
 
37
- class BlahEntity extends Entity<BlahFields, string, ViewerContext> {
37
+ class BlahEntity extends Entity<BlahFields, 'id', ViewerContext> {
38
38
  static defineCompanionDefinition(): EntityCompanionDefinition<
39
39
  BlahFields,
40
- string,
40
+ 'id',
41
41
  ViewerContext,
42
42
  BlahEntity,
43
43
  BlahEntityPrivacyPolicy
44
44
  > {
45
45
  return {
46
46
  entityClass: BlahEntity,
47
- entityConfiguration: new EntityConfiguration<BlahFields>({
47
+ entityConfiguration: new EntityConfiguration<BlahFields, 'id'>({
48
48
  idField: 'id',
49
49
  tableName: 'blah_table',
50
50
  schema: {
@@ -66,14 +66,14 @@ class BlahEntity extends Entity<BlahFields, string, ViewerContext> {
66
66
 
67
67
  class TestNonTransactionalMutationTrigger extends EntityNonTransactionalMutationTrigger<
68
68
  BlahFields,
69
- string,
69
+ 'id',
70
70
  ViewerContext,
71
71
  BlahEntity
72
72
  > {
73
73
  async executeAsync(
74
74
  viewerContext: ViewerContext,
75
75
  entity: BlahEntity,
76
- mutationInfo: EntityTriggerMutationInfo<BlahFields, string, ViewerContext, BlahEntity>,
76
+ mutationInfo: EntityTriggerMutationInfo<BlahFields, 'id', ViewerContext, BlahEntity>,
77
77
  ): Promise<void> {
78
78
  if (mutationInfo.type === EntityMutationType.DELETE) {
79
79
  const entityLoaded = await BlahEntity.loader(viewerContext).loadByIDNullableAsync(
@@ -0,0 +1,73 @@
1
+ import EntityMutatorFactory from '../EntityMutatorFactory';
2
+ import ViewerContext from '../ViewerContext';
3
+ import TestEntity from '../utils/__testfixtures__/TestEntity';
4
+ import { createUnitTestEntityCompanionProvider } from '../utils/__testfixtures__/createUnitTestEntityCompanionProvider';
5
+
6
+ describe(EntityMutatorFactory, () => {
7
+ test('cache consistency across single and composite field mutations', async () => {
8
+ const companionProvider = createUnitTestEntityCompanionProvider();
9
+ const viewerContext = new ViewerContext(companionProvider);
10
+
11
+ // put the entity in cache
12
+ let entity = await TestEntity.creator(viewerContext)
13
+ .setField('stringField', 'test')
14
+ .setField('intField', 4)
15
+ .createAsync();
16
+ const entitiesLoadedSingle = await TestEntity.loader(
17
+ viewerContext,
18
+ ).loadManyByFieldEqualingAsync('stringField', 'test');
19
+ expect(entitiesLoadedSingle.length).toBe(1);
20
+ const entitiesLoadedComposite = await TestEntity.loader(
21
+ viewerContext,
22
+ ).loadManyByCompositeFieldEqualingAsync(['stringField', 'intField'], {
23
+ stringField: 'test',
24
+ intField: 4,
25
+ });
26
+ expect(entitiesLoadedComposite.length).toBe(1);
27
+
28
+ // update the string field
29
+ entity = await TestEntity.updater(entity).setField('stringField', 'wat').updateAsync();
30
+
31
+ // check that old cache entries are gone
32
+ const entitiesLoadedSingle2 = await TestEntity.loader(
33
+ viewerContext,
34
+ ).loadManyByFieldEqualingAsync('stringField', 'test');
35
+ expect(entitiesLoadedSingle2.length).toBe(0);
36
+ const entitiesLoadedComposite2 = await TestEntity.loader(
37
+ viewerContext,
38
+ ).loadManyByCompositeFieldEqualingAsync(['stringField', 'intField'], {
39
+ stringField: 'test',
40
+ intField: 4,
41
+ });
42
+ expect(entitiesLoadedComposite2.length).toBe(0);
43
+
44
+ // check that new cache entries are there
45
+ const entitiesLoadedSingle3 = await TestEntity.loader(
46
+ viewerContext,
47
+ ).loadManyByFieldEqualingAsync('stringField', 'wat');
48
+ expect(entitiesLoadedSingle3.length).toBe(1);
49
+ const entitiesLoadedComposite3 = await TestEntity.loader(
50
+ viewerContext,
51
+ ).loadManyByCompositeFieldEqualingAsync(['stringField', 'intField'], {
52
+ stringField: 'wat',
53
+ intField: 4,
54
+ });
55
+ expect(entitiesLoadedComposite3.length).toBe(1);
56
+
57
+ // delete the entity
58
+ await TestEntity.deleter(entity).deleteAsync();
59
+
60
+ // check that cache entries are gone
61
+ const entitiesLoadedSingle4 = await TestEntity.loader(
62
+ viewerContext,
63
+ ).loadManyByFieldEqualingAsync('stringField', 'wat');
64
+ expect(entitiesLoadedSingle4.length).toBe(0);
65
+ const entitiesLoadedComposite4 = await TestEntity.loader(
66
+ viewerContext,
67
+ ).loadManyByCompositeFieldEqualingAsync(['stringField', 'intField'], {
68
+ stringField: 'wat',
69
+ intField: 4,
70
+ });
71
+ expect(entitiesLoadedComposite4.length).toBe(0);
72
+ });
73
+ });