@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
@@ -9,6 +9,7 @@ import ReadonlyEntity from './ReadonlyEntity';
9
9
  import ViewerContext from './ViewerContext';
10
10
  import { pick } from './entityUtils';
11
11
  import EntityDataManager from './internal/EntityDataManager';
12
+ import { SingleFieldHolder, SingleFieldValueHolder } from './internal/SingleFieldHolder';
12
13
  import IEntityMetricsAdapter from './metrics/IEntityMetricsAdapter';
13
14
  import { mapMapAsync } from './utils/collections/maps';
14
15
 
@@ -17,13 +18,13 @@ import { mapMapAsync } from './utils/collections/maps';
17
18
  * Methods are exposed publicly since in rare cases they may need to be called manually.
18
19
  */
19
20
  export default class EntityLoaderUtils<
20
- TFields extends object,
21
- TID extends NonNullable<TFields[TSelectedFields]>,
21
+ TFields extends Record<string, any>,
22
+ TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
22
23
  TViewerContext extends ViewerContext,
23
- TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>,
24
+ TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
24
25
  TPrivacyPolicy extends EntityPrivacyPolicy<
25
26
  TFields,
26
- TID,
27
+ TIDField,
27
28
  TViewerContext,
28
29
  TEntity,
29
30
  TSelectedFields
@@ -35,15 +36,15 @@ export default class EntityLoaderUtils<
35
36
  private readonly queryContext: EntityQueryContext,
36
37
  private readonly privacyPolicyEvaluationContext: EntityPrivacyPolicyEvaluationContext<
37
38
  TFields,
38
- TID,
39
+ TIDField,
39
40
  TViewerContext,
40
41
  TEntity,
41
42
  TSelectedFields
42
43
  >,
43
- private readonly entityConfiguration: EntityConfiguration<TFields>,
44
+ private readonly entityConfiguration: EntityConfiguration<TFields, TIDField>,
44
45
  private readonly entityClass: IEntityClass<
45
46
  TFields,
46
- TID,
47
+ TIDField,
47
48
  TViewerContext,
48
49
  TEntity,
49
50
  TPrivacyPolicy,
@@ -51,7 +52,7 @@ export default class EntityLoaderUtils<
51
52
  >,
52
53
  private readonly entitySelectedFields: TSelectedFields[] | undefined,
53
54
  private readonly privacyPolicy: TPrivacyPolicy,
54
- private readonly dataManager: EntityDataManager<TFields>,
55
+ private readonly dataManager: EntityDataManager<TFields, TIDField>,
55
56
  protected readonly metricsAdapter: IEntityMetricsAdapter,
56
57
  ) {}
57
58
 
@@ -60,7 +61,35 @@ export default class EntityLoaderUtils<
60
61
  * @param objectFields - entity data object to be invalidated
61
62
  */
62
63
  async invalidateFieldsAsync(objectFields: Readonly<TFields>): Promise<void> {
63
- await this.dataManager.invalidateObjectFieldsAsync(objectFields);
64
+ const keys = Object.keys(objectFields) as (keyof TFields)[];
65
+ const singleFieldKeyValues = keys
66
+ .map((fieldName: keyof TFields) => {
67
+ const value = objectFields[fieldName];
68
+ if (value === undefined || value === null) {
69
+ return null;
70
+ }
71
+ return [
72
+ new SingleFieldHolder<TFields, TIDField, typeof fieldName>(fieldName),
73
+ new SingleFieldValueHolder(value),
74
+ ] as const;
75
+ })
76
+ .filter((kv) => kv !== null);
77
+
78
+ const compositeFieldKeyValues = this.entityConfiguration.compositeFieldInfo
79
+ .getAllCompositeFieldHolders()
80
+ .map((compositeFieldHolder) => {
81
+ const compositeFieldValueHolder =
82
+ compositeFieldHolder.extractCompositeFieldValueHolderFromObjectFields(objectFields);
83
+ return compositeFieldValueHolder
84
+ ? ([compositeFieldHolder, compositeFieldValueHolder] as const)
85
+ : null;
86
+ })
87
+ .filter((kv) => kv !== null);
88
+
89
+ await this.dataManager.invalidateKeyValuePairsAsync([
90
+ ...singleFieldKeyValues,
91
+ ...compositeFieldKeyValues,
92
+ ]);
64
93
  }
65
94
 
66
95
  /**
@@ -86,7 +115,7 @@ export default class EntityLoaderUtils<
86
115
  const selectedFields = pick(fieldsObject, entitySelectedFields);
87
116
  return new this.entityClass({
88
117
  viewerContext: this.viewerContext,
89
- id: id as TID,
118
+ id: id as TFields[TIDField],
90
119
  databaseFields: fieldsObject,
91
120
  selectedFields,
92
121
  });
@@ -8,10 +8,10 @@ export enum EntityMutationType {
8
8
  }
9
9
 
10
10
  export type EntityValidatorMutationInfo<
11
- TFields extends object,
12
- TID extends NonNullable<TFields[TSelectedFields]>,
11
+ TFields extends Record<string, any>,
12
+ TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
13
13
  TViewerContext extends ViewerContext,
14
- TEntity extends Entity<TFields, TID, TViewerContext, TSelectedFields>,
14
+ TEntity extends Entity<TFields, TIDField, TViewerContext, TSelectedFields>,
15
15
  TSelectedFields extends keyof TFields = keyof TFields,
16
16
  > =
17
17
  | {
@@ -39,10 +39,10 @@ export type EntityCascadingDeletionInfo = {
39
39
  };
40
40
 
41
41
  export type EntityTriggerMutationInfo<
42
- TFields extends object,
43
- TID extends NonNullable<TFields[TSelectedFields]>,
42
+ TFields extends Record<string, any>,
43
+ TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
44
44
  TViewerContext extends ViewerContext,
45
- TEntity extends Entity<TFields, TID, TViewerContext, TSelectedFields>,
45
+ TEntity extends Entity<TFields, TIDField, TViewerContext, TSelectedFields>,
46
46
  TSelectedFields extends keyof TFields = keyof TFields,
47
47
  > =
48
48
  | {
@@ -7,48 +7,84 @@ import ViewerContext from './ViewerContext';
7
7
  * Interface to define trigger behavior for entities.
8
8
  */
9
9
  export default interface EntityMutationTriggerConfiguration<
10
- TFields extends object,
11
- TID extends NonNullable<TFields[TSelectedFields]>,
10
+ TFields extends Record<string, any>,
11
+ TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
12
12
  TViewerContext extends ViewerContext,
13
- TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>,
13
+ TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
14
14
  TSelectedFields extends keyof TFields = keyof TFields,
15
15
  > {
16
16
  /**
17
17
  * Trigger set that runs within the transaction but before the entity is created in the database.
18
18
  */
19
- beforeCreate?: EntityMutationTrigger<TFields, TID, TViewerContext, TEntity, TSelectedFields>[];
19
+ beforeCreate?: EntityMutationTrigger<
20
+ TFields,
21
+ TIDField,
22
+ TViewerContext,
23
+ TEntity,
24
+ TSelectedFields
25
+ >[];
20
26
  /**
21
27
  * Trigger set that runs within the transaction but after the entity is created in the database and cache is invalidated.
22
28
  */
23
- afterCreate?: EntityMutationTrigger<TFields, TID, TViewerContext, TEntity, TSelectedFields>[];
29
+ afterCreate?: EntityMutationTrigger<
30
+ TFields,
31
+ TIDField,
32
+ TViewerContext,
33
+ TEntity,
34
+ TSelectedFields
35
+ >[];
24
36
 
25
37
  /**
26
38
  * Trigger set that runs within the transaction but before the entity is updated in the database.
27
39
  */
28
- beforeUpdate?: EntityMutationTrigger<TFields, TID, TViewerContext, TEntity, TSelectedFields>[];
40
+ beforeUpdate?: EntityMutationTrigger<
41
+ TFields,
42
+ TIDField,
43
+ TViewerContext,
44
+ TEntity,
45
+ TSelectedFields
46
+ >[];
29
47
  /**
30
48
  * Trigger set that runs within the transaction but after the entity is updated in the database and cache is invalidated.
31
49
  */
32
- afterUpdate?: EntityMutationTrigger<TFields, TID, TViewerContext, TEntity, TSelectedFields>[];
50
+ afterUpdate?: EntityMutationTrigger<
51
+ TFields,
52
+ TIDField,
53
+ TViewerContext,
54
+ TEntity,
55
+ TSelectedFields
56
+ >[];
33
57
 
34
58
  /**
35
59
  * Trigger set that runs within the transaction but before the entity is deleted from the database.
36
60
  */
37
- beforeDelete?: EntityMutationTrigger<TFields, TID, TViewerContext, TEntity, TSelectedFields>[];
61
+ beforeDelete?: EntityMutationTrigger<
62
+ TFields,
63
+ TIDField,
64
+ TViewerContext,
65
+ TEntity,
66
+ TSelectedFields
67
+ >[];
38
68
  /**
39
69
  * Trigger set that runs within the transaction but after the entity is deleted from the database and cache is invalidated.
40
70
  */
41
- afterDelete?: EntityMutationTrigger<TFields, TID, TViewerContext, TEntity, TSelectedFields>[];
71
+ afterDelete?: EntityMutationTrigger<
72
+ TFields,
73
+ TIDField,
74
+ TViewerContext,
75
+ TEntity,
76
+ TSelectedFields
77
+ >[];
42
78
 
43
79
  /**
44
80
  * Trigger set that runs within the transaction but before the entity is created, updated, or deleted.
45
81
  */
46
- beforeAll?: EntityMutationTrigger<TFields, TID, TViewerContext, TEntity, TSelectedFields>[];
82
+ beforeAll?: EntityMutationTrigger<TFields, TIDField, TViewerContext, TEntity, TSelectedFields>[];
47
83
  /**
48
84
  * Trigger set that runs within the transaction but after the entity is created in, updated in, or deleted from
49
85
  * the database and the cache is invalidated.
50
86
  */
51
- afterAll?: EntityMutationTrigger<TFields, TID, TViewerContext, TEntity, TSelectedFields>[];
87
+ afterAll?: EntityMutationTrigger<TFields, TIDField, TViewerContext, TEntity, TSelectedFields>[];
52
88
 
53
89
  /**
54
90
  * Trigger set that runs after committing the mutation transaction. If the call to the mutation is wrapped in a transaction, these
@@ -56,7 +92,7 @@ export default interface EntityMutationTriggerConfiguration<
56
92
  */
57
93
  afterCommit?: EntityNonTransactionalMutationTrigger<
58
94
  TFields,
59
- TID,
95
+ TIDField,
60
96
  TViewerContext,
61
97
  TEntity,
62
98
  TSelectedFields
@@ -68,17 +104,23 @@ export default interface EntityMutationTriggerConfiguration<
68
104
  * same transaction as the mutation itself.
69
105
  */
70
106
  export abstract class EntityMutationTrigger<
71
- TFields extends object,
72
- TID extends NonNullable<TFields[TSelectedFields]>,
107
+ TFields extends Record<string, any>,
108
+ TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
73
109
  TViewerContext extends ViewerContext,
74
- TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>,
110
+ TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
75
111
  TSelectedFields extends keyof TFields = keyof TFields,
76
112
  > {
77
113
  abstract executeAsync(
78
114
  viewerContext: TViewerContext,
79
115
  queryContext: EntityTransactionalQueryContext,
80
116
  entity: TEntity,
81
- mutationInfo: EntityTriggerMutationInfo<TFields, TID, TViewerContext, TEntity, TSelectedFields>,
117
+ mutationInfo: EntityTriggerMutationInfo<
118
+ TFields,
119
+ TIDField,
120
+ TViewerContext,
121
+ TEntity,
122
+ TSelectedFields
123
+ >,
82
124
  ): Promise<void>;
83
125
  }
84
126
 
@@ -87,15 +129,21 @@ export abstract class EntityMutationTrigger<
87
129
  * since they run after the transaction is committed.
88
130
  */
89
131
  export abstract class EntityNonTransactionalMutationTrigger<
90
- TFields extends object,
91
- TID extends NonNullable<TFields[TSelectedFields]>,
132
+ TFields extends Record<string, any>,
133
+ TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
92
134
  TViewerContext extends ViewerContext,
93
- TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>,
135
+ TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
94
136
  TSelectedFields extends keyof TFields = keyof TFields,
95
137
  > {
96
138
  abstract executeAsync(
97
139
  viewerContext: TViewerContext,
98
140
  entity: TEntity,
99
- mutationInfo: EntityTriggerMutationInfo<TFields, TID, TViewerContext, TEntity, TSelectedFields>,
141
+ mutationInfo: EntityTriggerMutationInfo<
142
+ TFields,
143
+ TIDField,
144
+ TViewerContext,
145
+ TEntity,
146
+ TSelectedFields
147
+ >,
100
148
  ): Promise<void>;
101
149
  }
@@ -8,10 +8,10 @@ import ViewerContext from './ViewerContext';
8
8
  * same transaction as the mutation itself before creating or updating an entity.
9
9
  */
10
10
  export default abstract class EntityMutationValidator<
11
- TFields extends object,
12
- TID extends NonNullable<TFields[TSelectedFields]>,
11
+ TFields extends Record<string, any>,
12
+ TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
13
13
  TViewerContext extends ViewerContext,
14
- TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>,
14
+ TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
15
15
  TSelectedFields extends keyof TFields = keyof TFields,
16
16
  > {
17
17
  abstract executeAsync(
@@ -20,7 +20,7 @@ export default abstract class EntityMutationValidator<
20
20
  entity: TEntity,
21
21
  mutationInfo: EntityValidatorMutationInfo<
22
22
  TFields,
23
- TID,
23
+ TIDField,
24
24
  TViewerContext,
25
25
  TEntity,
26
26
  TSelectedFields
@@ -19,13 +19,13 @@ import IEntityMetricsAdapter from './metrics/IEntityMetricsAdapter';
19
19
  * The primary interface for creating, mutating, and deleting entities.
20
20
  */
21
21
  export default class EntityMutatorFactory<
22
- TFields extends object,
23
- TID extends NonNullable<TFields[TSelectedFields]>,
22
+ TFields extends Record<string, any>,
23
+ TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
24
24
  TViewerContext extends ViewerContext,
25
- TEntity extends Entity<TFields, TID, TViewerContext, TSelectedFields>,
25
+ TEntity extends Entity<TFields, TIDField, TViewerContext, TSelectedFields>,
26
26
  TPrivacyPolicy extends EntityPrivacyPolicy<
27
27
  TFields,
28
- TID,
28
+ TIDField,
29
29
  TViewerContext,
30
30
  TEntity,
31
31
  TSelectedFields
@@ -34,10 +34,10 @@ export default class EntityMutatorFactory<
34
34
  > {
35
35
  constructor(
36
36
  private readonly entityCompanionProvider: EntityCompanionProvider,
37
- private readonly entityConfiguration: EntityConfiguration<TFields>,
37
+ private readonly entityConfiguration: EntityConfiguration<TFields, TIDField>,
38
38
  private readonly entityClass: IEntityClass<
39
39
  TFields,
40
- TID,
40
+ TIDField,
41
41
  TViewerContext,
42
42
  TEntity,
43
43
  TPrivacyPolicy,
@@ -46,27 +46,27 @@ export default class EntityMutatorFactory<
46
46
  private readonly privacyPolicy: TPrivacyPolicy,
47
47
  private readonly mutationValidators: EntityMutationValidator<
48
48
  TFields,
49
- TID,
49
+ TIDField,
50
50
  TViewerContext,
51
51
  TEntity,
52
52
  TSelectedFields
53
53
  >[],
54
54
  private readonly mutationTriggers: EntityMutationTriggerConfiguration<
55
55
  TFields,
56
- TID,
56
+ TIDField,
57
57
  TViewerContext,
58
58
  TEntity,
59
59
  TSelectedFields
60
60
  >,
61
61
  private readonly entityLoaderFactory: EntityLoaderFactory<
62
62
  TFields,
63
- TID,
63
+ TIDField,
64
64
  TViewerContext,
65
65
  TEntity,
66
66
  TPrivacyPolicy,
67
67
  TSelectedFields
68
68
  >,
69
- private readonly databaseAdapter: EntityDatabaseAdapter<TFields>,
69
+ private readonly databaseAdapter: EntityDatabaseAdapter<TFields, TIDField>,
70
70
  private readonly metricsAdapter: IEntityMetricsAdapter,
71
71
  ) {}
72
72
 
@@ -81,7 +81,7 @@ export default class EntityMutatorFactory<
81
81
  queryContext: EntityQueryContext,
82
82
  ): AuthorizationResultBasedCreateMutator<
83
83
  TFields,
84
- TID,
84
+ TIDField,
85
85
  TViewerContext,
86
86
  TEntity,
87
87
  TPrivacyPolicy,
@@ -113,7 +113,7 @@ export default class EntityMutatorFactory<
113
113
  queryContext: EntityQueryContext,
114
114
  ): AuthorizationResultBasedUpdateMutator<
115
115
  TFields,
116
- TID,
116
+ TIDField,
117
117
  TViewerContext,
118
118
  TEntity,
119
119
  TPrivacyPolicy,
@@ -145,7 +145,7 @@ export default class EntityMutatorFactory<
145
145
  queryContext: EntityQueryContext,
146
146
  ): AuthorizationResultBasedDeleteMutator<
147
147
  TFields,
148
- TID,
148
+ TIDField,
149
149
  TViewerContext,
150
150
  TEntity,
151
151
  TPrivacyPolicy,
@@ -12,10 +12,10 @@ import PrivacyPolicyRule, { RuleEvaluationResult } from './rules/PrivacyPolicyRu
12
12
  * Information about the reason this privacy policy is being evaluated.
13
13
  */
14
14
  export type EntityPrivacyPolicyEvaluationContext<
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
  TSelectedFields extends keyof TFields = keyof TFields,
20
20
  > = {
21
21
  /**
@@ -53,10 +53,10 @@ export enum EntityPrivacyPolicyEvaluationMode {
53
53
  }
54
54
 
55
55
  export type EntityPrivacyPolicyEvaluator<
56
- TFields extends object,
57
- TID extends NonNullable<TFields[TSelectedFields]>,
56
+ TFields extends Record<string, any>,
57
+ TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
58
58
  TViewerContext extends ViewerContext,
59
- TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>,
59
+ TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
60
60
  TSelectedFields extends keyof TFields = keyof TFields,
61
61
  > =
62
62
  | {
@@ -65,13 +65,25 @@ export type EntityPrivacyPolicyEvaluator<
65
65
  | {
66
66
  mode: EntityPrivacyPolicyEvaluationMode.DRY_RUN;
67
67
  denyHandler: (
68
- error: EntityNotAuthorizedError<TFields, TID, TViewerContext, TEntity, TSelectedFields>,
68
+ error: EntityNotAuthorizedError<
69
+ TFields,
70
+ TIDField,
71
+ TViewerContext,
72
+ TEntity,
73
+ TSelectedFields
74
+ >,
69
75
  ) => void;
70
76
  }
71
77
  | {
72
78
  mode: EntityPrivacyPolicyEvaluationMode.ENFORCE_AND_LOG;
73
79
  denyHandler: (
74
- error: EntityNotAuthorizedError<TFields, TID, TViewerContext, TEntity, TSelectedFields>,
80
+ error: EntityNotAuthorizedError<
81
+ TFields,
82
+ TIDField,
83
+ TViewerContext,
84
+ TEntity,
85
+ TSelectedFields
86
+ >,
75
87
  ) => void;
76
88
  };
77
89
 
@@ -104,36 +116,36 @@ export enum EntityAuthorizationAction {
104
116
  * ```
105
117
  */
106
118
  export default abstract class EntityPrivacyPolicy<
107
- TFields extends object,
108
- TID extends NonNullable<TFields[TSelectedFields]>,
119
+ TFields extends Record<string, any>,
120
+ TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
109
121
  TViewerContext extends ViewerContext,
110
- TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>,
122
+ TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
111
123
  TSelectedFields extends keyof TFields = keyof TFields,
112
124
  > {
113
125
  protected readonly createRules: readonly PrivacyPolicyRule<
114
126
  TFields,
115
- TID,
127
+ TIDField,
116
128
  TViewerContext,
117
129
  TEntity,
118
130
  TSelectedFields
119
131
  >[] = [];
120
132
  protected readonly readRules: readonly PrivacyPolicyRule<
121
133
  TFields,
122
- TID,
134
+ TIDField,
123
135
  TViewerContext,
124
136
  TEntity,
125
137
  TSelectedFields
126
138
  >[] = [];
127
139
  protected readonly updateRules: readonly PrivacyPolicyRule<
128
140
  TFields,
129
- TID,
141
+ TIDField,
130
142
  TViewerContext,
131
143
  TEntity,
132
144
  TSelectedFields
133
145
  >[] = [];
134
146
  protected readonly deleteRules: readonly PrivacyPolicyRule<
135
147
  TFields,
136
- TID,
148
+ TIDField,
137
149
  TViewerContext,
138
150
  TEntity,
139
151
  TSelectedFields
@@ -149,7 +161,7 @@ export default abstract class EntityPrivacyPolicy<
149
161
  */
150
162
  protected getPrivacyPolicyEvaluator(
151
163
  _viewerContext: TViewerContext,
152
- ): EntityPrivacyPolicyEvaluator<TFields, TID, TViewerContext, TEntity, TSelectedFields> {
164
+ ): EntityPrivacyPolicyEvaluator<TFields, TIDField, TViewerContext, TEntity, TSelectedFields> {
153
165
  return {
154
166
  mode: EntityPrivacyPolicyEvaluationMode.ENFORCE,
155
167
  };
@@ -168,7 +180,7 @@ export default abstract class EntityPrivacyPolicy<
168
180
  queryContext: EntityQueryContext,
169
181
  evaluationContext: EntityPrivacyPolicyEvaluationContext<
170
182
  TFields,
171
- TID,
183
+ TIDField,
172
184
  TViewerContext,
173
185
  TEntity,
174
186
  TSelectedFields
@@ -200,7 +212,7 @@ export default abstract class EntityPrivacyPolicy<
200
212
  queryContext: EntityQueryContext,
201
213
  evaluationContext: EntityPrivacyPolicyEvaluationContext<
202
214
  TFields,
203
- TID,
215
+ TIDField,
204
216
  TViewerContext,
205
217
  TEntity,
206
218
  TSelectedFields
@@ -232,7 +244,7 @@ export default abstract class EntityPrivacyPolicy<
232
244
  queryContext: EntityQueryContext,
233
245
  evaluationContext: EntityPrivacyPolicyEvaluationContext<
234
246
  TFields,
235
- TID,
247
+ TIDField,
236
248
  TViewerContext,
237
249
  TEntity,
238
250
  TSelectedFields
@@ -264,7 +276,7 @@ export default abstract class EntityPrivacyPolicy<
264
276
  queryContext: EntityQueryContext,
265
277
  evaluationContext: EntityPrivacyPolicyEvaluationContext<
266
278
  TFields,
267
- TID,
279
+ TIDField,
268
280
  TViewerContext,
269
281
  TEntity,
270
282
  TSelectedFields
@@ -284,12 +296,18 @@ export default abstract class EntityPrivacyPolicy<
284
296
  }
285
297
 
286
298
  private async authorizeForRulesetAsync(
287
- ruleset: readonly PrivacyPolicyRule<TFields, TID, TViewerContext, TEntity, TSelectedFields>[],
299
+ ruleset: readonly PrivacyPolicyRule<
300
+ TFields,
301
+ TIDField,
302
+ TViewerContext,
303
+ TEntity,
304
+ TSelectedFields
305
+ >[],
288
306
  viewerContext: TViewerContext,
289
307
  queryContext: EntityQueryContext,
290
308
  evaluationContext: EntityPrivacyPolicyEvaluationContext<
291
309
  TFields,
292
- TID,
310
+ TIDField,
293
311
  TViewerContext,
294
312
  TEntity,
295
313
  TSelectedFields
@@ -393,12 +411,18 @@ export default abstract class EntityPrivacyPolicy<
393
411
  }
394
412
 
395
413
  private async authorizeForRulesetInnerAsync(
396
- ruleset: readonly PrivacyPolicyRule<TFields, TID, TViewerContext, TEntity, TSelectedFields>[],
414
+ ruleset: readonly PrivacyPolicyRule<
415
+ TFields,
416
+ TIDField,
417
+ TViewerContext,
418
+ TEntity,
419
+ TSelectedFields
420
+ >[],
397
421
  viewerContext: TViewerContext,
398
422
  queryContext: EntityQueryContext,
399
423
  evaluationContext: EntityPrivacyPolicyEvaluationContext<
400
424
  TFields,
401
- TID,
425
+ TIDField,
402
426
  TViewerContext,
403
427
  TEntity,
404
428
  TSelectedFields
@@ -418,7 +442,7 @@ export default abstract class EntityPrivacyPolicy<
418
442
  case RuleEvaluationResult.DENY:
419
443
  throw new EntityNotAuthorizedError<
420
444
  TFields,
421
- TID,
445
+ TIDField,
422
446
  TViewerContext,
423
447
  TEntity,
424
448
  TSelectedFields
@@ -434,7 +458,7 @@ export default abstract class EntityPrivacyPolicy<
434
458
  }
435
459
  }
436
460
 
437
- throw new EntityNotAuthorizedError<TFields, TID, TViewerContext, TEntity, TSelectedFields>(
461
+ throw new EntityNotAuthorizedError<TFields, TIDField, TViewerContext, TEntity, TSelectedFields>(
438
462
  entity,
439
463
  viewerContext,
440
464
  action,
@@ -10,7 +10,7 @@ import { mapMap } from './utils/collections/maps';
10
10
  * An interface that knows how to load many objects from a cache by load params and invalidate
11
11
  * those same load params.
12
12
  */
13
- export interface ISecondaryEntityCache<TFields, TLoadParams> {
13
+ export interface ISecondaryEntityCache<TFields extends Record<string, any>, TLoadParams> {
14
14
  /**
15
15
  * Read-through cache function.
16
16
  * @param loadParamsArray - array of loadParams to load from the cache
@@ -45,13 +45,13 @@ export interface ISecondaryEntityCache<TFields, TLoadParams> {
45
45
  */
46
46
  export default abstract class EntitySecondaryCacheLoader<
47
47
  TLoadParams,
48
- TFields extends object,
49
- TID extends NonNullable<TFields[TSelectedFields]>,
48
+ TFields extends Record<string, any>,
49
+ TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
50
50
  TViewerContext extends ViewerContext,
51
- TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>,
51
+ TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
52
52
  TPrivacyPolicy extends EntityPrivacyPolicy<
53
53
  TFields,
54
- TID,
54
+ TIDField,
55
55
  TViewerContext,
56
56
  TEntity,
57
57
  TSelectedFields
@@ -62,7 +62,7 @@ export default abstract class EntitySecondaryCacheLoader<
62
62
  private readonly secondaryEntityCache: ISecondaryEntityCache<TFields, TLoadParams>,
63
63
  protected readonly entityLoader: AuthorizationResultBasedEntityLoader<
64
64
  TFields,
65
- TID,
65
+ TIDField,
66
66
  TViewerContext,
67
67
  TEntity,
68
68
  TPrivacyPolicy,
@@ -10,13 +10,13 @@ import ViewerContext from './ViewerContext';
10
10
  * The primary interface for updating entities.
11
11
  */
12
12
  export default class EntityUpdater<
13
- TFields extends object,
14
- TID extends NonNullable<TFields[TSelectedFields]>,
13
+ TFields extends Record<string, any>,
14
+ TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
15
15
  TViewerContext extends ViewerContext,
16
- TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>,
16
+ TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
17
17
  TPrivacyPolicy extends EntityPrivacyPolicy<
18
18
  TFields,
19
- TID,
19
+ TIDField,
20
20
  TViewerContext,
21
21
  TEntity,
22
22
  TSelectedFields
@@ -28,7 +28,7 @@ export default class EntityUpdater<
28
28
  private readonly queryContext: EntityQueryContext,
29
29
  private readonly entityClass: IEntityClass<
30
30
  TFields,
31
- TID,
31
+ TIDField,
32
32
  TViewerContext,
33
33
  TEntity,
34
34
  TPrivacyPolicy,
@@ -42,7 +42,7 @@ export default class EntityUpdater<
42
42
  */
43
43
  enforcing(): EnforcingEntityUpdater<
44
44
  TFields,
45
- TID,
45
+ TIDField,
46
46
  TViewerContext,
47
47
  TEntity,
48
48
  TPrivacyPolicy,
@@ -58,7 +58,7 @@ export default class EntityUpdater<
58
58
  */
59
59
  withAuthorizationResults(): AuthorizationResultBasedUpdateMutator<
60
60
  TFields,
61
- TID,
61
+ TIDField,
62
62
  TViewerContext,
63
63
  TEntity,
64
64
  TPrivacyPolicy,