@expo/entity 0.40.0 → 0.42.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (433) hide show
  1. package/build/AuthorizationResultBasedEntityAssociationLoader.d.ts +16 -16
  2. package/build/AuthorizationResultBasedEntityAssociationLoader.js +2 -4
  3. package/build/AuthorizationResultBasedEntityAssociationLoader.js.map +1 -1
  4. package/build/AuthorizationResultBasedEntityLoader.d.ts +39 -67
  5. package/build/AuthorizationResultBasedEntityLoader.js +85 -62
  6. package/build/AuthorizationResultBasedEntityLoader.js.map +1 -1
  7. package/build/AuthorizationResultBasedEntityMutator.d.ts +16 -16
  8. package/build/AuthorizationResultBasedEntityMutator.js.map +1 -1
  9. package/build/ComposedEntityCacheAdapter.d.ts +7 -6
  10. package/build/ComposedEntityCacheAdapter.js +28 -28
  11. package/build/ComposedEntityCacheAdapter.js.map +1 -1
  12. package/build/ComposedSecondaryEntityCache.d.ts +1 -1
  13. package/build/ComposedSecondaryEntityCache.js.map +1 -1
  14. package/build/EnforcingEntityAssociationLoader.d.ts +15 -15
  15. package/build/EnforcingEntityAssociationLoader.js.map +1 -1
  16. package/build/EnforcingEntityCreator.d.ts +2 -2
  17. package/build/EnforcingEntityDeleter.d.ts +2 -2
  18. package/build/EnforcingEntityLoader.d.ts +104 -18
  19. package/build/EnforcingEntityLoader.js +113 -12
  20. package/build/EnforcingEntityLoader.js.map +1 -1
  21. package/build/EnforcingEntityUpdater.d.ts +2 -2
  22. package/build/Entity.d.ts +32 -10
  23. package/build/Entity.js +41 -3
  24. package/build/Entity.js.map +1 -1
  25. package/build/EntityAssociationLoader.d.ts +3 -3
  26. package/build/EntityCompanion.d.ts +5 -5
  27. package/build/EntityCompanion.js.map +1 -1
  28. package/build/EntityCompanionProvider.d.ts +6 -6
  29. package/build/EntityCompanionProvider.js.map +1 -1
  30. package/build/EntityConfiguration.d.ts +46 -5
  31. package/build/EntityConfiguration.js +39 -1
  32. package/build/EntityConfiguration.js.map +1 -1
  33. package/build/EntityCreator.d.ts +4 -4
  34. package/build/EntityDatabaseAdapter.d.ts +15 -14
  35. package/build/EntityDatabaseAdapter.js +20 -12
  36. package/build/EntityDatabaseAdapter.js.map +1 -1
  37. package/build/EntityDeleter.d.ts +4 -4
  38. package/build/EntityFieldDefinition.d.ts +20 -10
  39. package/build/EntityFieldDefinition.js +3 -1
  40. package/build/EntityFieldDefinition.js.map +1 -1
  41. package/build/EntityFields.d.ts +14 -12
  42. package/build/EntityFields.js.map +1 -1
  43. package/build/EntityLoader.d.ts +5 -5
  44. package/build/EntityLoaderFactory.d.ts +3 -3
  45. package/build/EntityLoaderFactory.js.map +1 -1
  46. package/build/EntityLoaderUtils.d.ts +2 -2
  47. package/build/EntityLoaderUtils.js +27 -1
  48. package/build/EntityLoaderUtils.js.map +1 -1
  49. package/build/EntityMutationInfo.d.ts +2 -2
  50. package/build/EntityMutationTriggerConfiguration.d.ts +14 -14
  51. package/build/EntityMutationTriggerConfiguration.js.map +1 -1
  52. package/build/EntityMutationValidator.d.ts +2 -2
  53. package/build/EntityMutatorFactory.d.ts +5 -5
  54. package/build/EntityMutatorFactory.js.map +1 -1
  55. package/build/EntityPrivacyPolicy.d.ts +14 -14
  56. package/build/EntityPrivacyPolicy.js.map +1 -1
  57. package/build/EntitySecondaryCacheLoader.d.ts +4 -4
  58. package/build/EntityUpdater.d.ts +4 -4
  59. package/build/GenericEntityCacheAdapter.d.ts +7 -6
  60. package/build/GenericEntityCacheAdapter.js +13 -14
  61. package/build/GenericEntityCacheAdapter.js.map +1 -1
  62. package/build/GenericSecondaryEntityCache.d.ts +3 -3
  63. package/build/GenericSecondaryEntityCache.js.map +1 -1
  64. package/build/IEntityCacheAdapter.d.ts +17 -16
  65. package/build/IEntityCacheAdapterProvider.d.ts +1 -1
  66. package/build/IEntityDatabaseAdapterProvider.d.ts +1 -1
  67. package/build/IEntityGenericCacher.d.ts +15 -5
  68. package/build/ReadonlyEntity.d.ts +27 -8
  69. package/build/ReadonlyEntity.js +31 -3
  70. package/build/ReadonlyEntity.js.map +1 -1
  71. package/build/ViewerContext.d.ts +1 -1
  72. package/build/ViewerScopedEntityCompanion.d.ts +5 -5
  73. package/build/ViewerScopedEntityCompanionProvider.d.ts +1 -1
  74. package/build/ViewerScopedEntityLoaderFactory.d.ts +3 -3
  75. package/build/ViewerScopedEntityMutatorFactory.d.ts +5 -5
  76. package/build/entityUtils.d.ts +1 -1
  77. package/build/entityUtils.js.map +1 -1
  78. package/build/errors/EntityInvalidFieldValueError.d.ts +2 -2
  79. package/build/errors/EntityNotAuthorizedError.d.ts +1 -1
  80. package/build/errors/EntityNotFoundError.d.ts +2 -2
  81. package/build/index.d.ts +7 -7
  82. package/build/index.js +8 -13
  83. package/build/index.js.map +1 -1
  84. package/build/internal/CompositeFieldHolder.d.ts +48 -0
  85. package/build/internal/CompositeFieldHolder.js +116 -0
  86. package/build/internal/CompositeFieldHolder.js.map +1 -0
  87. package/build/internal/CompositeFieldValueMap.d.ts +15 -0
  88. package/build/internal/CompositeFieldValueMap.js +51 -0
  89. package/build/internal/CompositeFieldValueMap.js.map +1 -0
  90. package/build/internal/EntityDataManager.d.ts +16 -16
  91. package/build/internal/EntityDataManager.js +42 -45
  92. package/build/internal/EntityDataManager.js.map +1 -1
  93. package/build/internal/EntityFieldTransformationUtils.d.ts +5 -5
  94. package/build/internal/EntityFieldTransformationUtils.js.map +1 -1
  95. package/build/internal/EntityLoadInterfaces.d.ts +104 -0
  96. package/build/internal/EntityLoadInterfaces.js +25 -0
  97. package/build/internal/EntityLoadInterfaces.js.map +1 -0
  98. package/build/internal/EntityTableDataCoordinator.d.ts +6 -6
  99. package/build/internal/EntityTableDataCoordinator.js.map +1 -1
  100. package/build/internal/ReadThroughEntityCache.d.ts +17 -16
  101. package/build/internal/ReadThroughEntityCache.js +36 -36
  102. package/build/internal/ReadThroughEntityCache.js.map +1 -1
  103. package/build/internal/SingleFieldHolder.d.ts +34 -0
  104. package/build/internal/SingleFieldHolder.js +90 -0
  105. package/build/internal/SingleFieldHolder.js.map +1 -0
  106. package/build/metrics/EntityMetricsUtils.d.ts +2 -1
  107. package/build/metrics/EntityMetricsUtils.js.map +1 -1
  108. package/build/metrics/IEntityMetricsAdapter.d.ts +5 -0
  109. package/build/metrics/IEntityMetricsAdapter.js.map +1 -1
  110. package/build/rules/AlwaysAllowPrivacyPolicyRule.d.ts +2 -2
  111. package/build/rules/AlwaysAllowPrivacyPolicyRule.js.map +1 -1
  112. package/build/rules/AlwaysDenyPrivacyPolicyRule.d.ts +2 -2
  113. package/build/rules/AlwaysDenyPrivacyPolicyRule.js.map +1 -1
  114. package/build/rules/AlwaysSkipPrivacyPolicyRule.d.ts +2 -2
  115. package/build/rules/AlwaysSkipPrivacyPolicyRule.js.map +1 -1
  116. package/build/rules/PrivacyPolicyRule.d.ts +2 -2
  117. package/build/tsconfig.build.tsbuildinfo +1 -0
  118. package/build/utils/EntityPrivacyUtils.d.ts +4 -4
  119. package/build/utils/EntityPrivacyUtils.js.map +1 -1
  120. package/build/utils/collections/SerializableKeyMap.d.ts +27 -0
  121. package/build/utils/collections/SerializableKeyMap.js +60 -0
  122. package/build/utils/collections/SerializableKeyMap.js.map +1 -0
  123. package/build/utils/collections/maps.js +1 -2
  124. package/build/utils/collections/maps.js.map +1 -1
  125. package/build/utils/collections/sets.d.ts +1 -0
  126. package/build/utils/collections/sets.js +7 -0
  127. package/build/utils/collections/sets.js.map +1 -0
  128. package/build/utils/mergeEntityMutationTriggerConfigurations.d.ts +1 -1
  129. package/package.json +8 -5
  130. package/src/AuthorizationResultBasedEntityAssociationLoader.ts +58 -53
  131. package/src/AuthorizationResultBasedEntityLoader.ts +194 -81
  132. package/src/AuthorizationResultBasedEntityMutator.ts +71 -45
  133. package/src/ComposedEntityCacheAdapter.ts +55 -46
  134. package/src/ComposedSecondaryEntityCache.ts +5 -2
  135. package/src/EnforcingEntityAssociationLoader.ts +52 -44
  136. package/src/EnforcingEntityCreator.ts +5 -5
  137. package/src/EnforcingEntityDeleter.ts +5 -5
  138. package/src/EnforcingEntityLoader.ts +158 -21
  139. package/src/EnforcingEntityUpdater.ts +5 -5
  140. package/src/Entity.ts +185 -29
  141. package/src/EntityAssociationLoader.ts +6 -6
  142. package/src/EntityCompanion.ts +11 -11
  143. package/src/EntityCompanionProvider.ts +21 -18
  144. package/src/EntityConfiguration.ts +123 -9
  145. package/src/EntityCreator.ts +7 -7
  146. package/src/EntityDatabaseAdapter.ts +51 -28
  147. package/src/EntityDeleter.ts +7 -7
  148. package/src/EntityFieldDefinition.ts +32 -12
  149. package/src/EntityFields.ts +49 -12
  150. package/src/EntityLoader.ts +8 -8
  151. package/src/EntityLoaderFactory.ts +8 -8
  152. package/src/EntityLoaderUtils.ts +39 -10
  153. package/src/EntityMutationInfo.ts +6 -6
  154. package/src/EntityMutationTriggerConfiguration.ts +68 -20
  155. package/src/EntityMutationValidator.ts +4 -4
  156. package/src/EntityMutatorFactory.ts +13 -13
  157. package/src/EntityPrivacyPolicy.ts +50 -26
  158. package/src/EntitySecondaryCacheLoader.ts +6 -6
  159. package/src/EntityUpdater.ts +7 -7
  160. package/src/GenericEntityCacheAdapter.ts +39 -28
  161. package/src/GenericSecondaryEntityCache.ts +6 -3
  162. package/src/IEntityCacheAdapter.ts +45 -25
  163. package/src/IEntityCacheAdapterProvider.ts +3 -3
  164. package/src/IEntityDatabaseAdapterProvider.ts +3 -3
  165. package/src/IEntityGenericCacher.ts +33 -5
  166. package/src/ReadonlyEntity.ts +129 -16
  167. package/src/ViewerContext.ts +5 -5
  168. package/src/ViewerScopedEntityCompanion.ts +7 -7
  169. package/src/ViewerScopedEntityCompanionProvider.ts +6 -6
  170. package/src/ViewerScopedEntityLoaderFactory.ts +7 -7
  171. package/src/ViewerScopedEntityMutatorFactory.ts +8 -8
  172. package/src/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.ts +41 -72
  173. package/src/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.ts +14 -13
  174. package/src/__tests__/AuthorizationResultBasedEntityLoader-test.ts +367 -69
  175. package/src/__tests__/ComposedCacheAdapter-test.ts +235 -117
  176. package/src/__tests__/EnforcingEntityLoader-test.ts +135 -1
  177. package/src/__tests__/Entity-test.ts +64 -11
  178. package/src/__tests__/EntityAssociationLoader-test.ts +6 -8
  179. package/src/__tests__/EntityCommonUseCases-test.ts +25 -28
  180. package/src/__tests__/EntityCompanion-test.ts +4 -4
  181. package/src/__tests__/EntityCompanionProvider-test.ts +9 -8
  182. package/src/__tests__/EntityConfiguration-test.ts +85 -6
  183. package/src/__tests__/EntityDatabaseAdapter-test.ts +113 -17
  184. package/src/__tests__/EntityEdges-test.ts +135 -138
  185. package/src/__tests__/EntityFields-test.ts +2 -2
  186. package/src/__tests__/EntityLoader-test.ts +5 -7
  187. package/src/__tests__/EntityMutator-MutationCacheConsistency-test.ts +17 -19
  188. package/src/__tests__/EntityMutator-SingleCompositeFieldCacheConsistency-test.ts +73 -0
  189. package/src/__tests__/EntityMutator-test.ts +74 -46
  190. package/src/__tests__/EntityPrivacyPolicy-test.ts +51 -74
  191. package/src/__tests__/EntityQueryContext-test.ts +1 -1
  192. package/src/__tests__/EntitySecondaryCacheLoader-test.ts +9 -9
  193. package/src/__tests__/EntitySelfReferentialEdges-test.ts +119 -122
  194. package/src/__tests__/GenericEntityCacheAdapter-test.ts +83 -28
  195. package/src/__tests__/ReadonlyEntity-test.ts +49 -9
  196. package/src/__tests__/ViewerContext-test.ts +1 -1
  197. package/src/__tests__/ViewerScopedEntityCompanion-test.ts +5 -2
  198. package/src/__tests__/ViewerScopedEntityCompanionProvider-test.ts +1 -1
  199. package/src/__tests__/ViewerScopedEntityMutatorFactory-test.ts +12 -3
  200. package/src/__tests__/cases/TwoEntitySameTableDisjointRows-test.ts +25 -27
  201. package/src/__tests__/cases/TwoEntitySameTableOverlappingRows-test.ts +28 -34
  202. package/src/entityUtils.ts +4 -1
  203. package/src/errors/EntityInvalidFieldValueError.ts +5 -5
  204. package/src/errors/EntityNotAuthorizedError.ts +3 -3
  205. package/src/errors/EntityNotFoundError.ts +5 -5
  206. package/src/index.ts +7 -7
  207. package/src/internal/CompositeFieldHolder.ts +218 -0
  208. package/src/internal/CompositeFieldValueMap.ts +78 -0
  209. package/src/internal/EntityDataManager.ts +107 -96
  210. package/src/internal/EntityFieldTransformationUtils.ts +33 -14
  211. package/src/internal/EntityLoadInterfaces.ts +143 -0
  212. package/src/internal/EntityTableDataCoordinator.ts +8 -5
  213. package/src/internal/ReadThroughEntityCache.ts +63 -50
  214. package/src/internal/SingleFieldHolder.ts +131 -0
  215. package/src/internal/__tests__/CompositeFieldHolder-test.ts +25 -0
  216. package/src/internal/__tests__/CompositeFieldValueMap-test.ts +43 -0
  217. package/src/internal/__tests__/EntityDataManager-test.ts +308 -91
  218. package/src/internal/__tests__/EntityFieldTransformationUtils-test.ts +3 -2
  219. package/src/internal/__tests__/ReadThroughEntityCache-test.ts +315 -107
  220. package/src/metrics/EntityMetricsUtils.ts +7 -2
  221. package/src/metrics/IEntityMetricsAdapter.ts +6 -0
  222. package/src/rules/AlwaysAllowPrivacyPolicyRule.ts +5 -5
  223. package/src/rules/AlwaysDenyPrivacyPolicyRule.ts +5 -5
  224. package/src/rules/AlwaysSkipPrivacyPolicyRule.ts +5 -5
  225. package/src/rules/PrivacyPolicyRule.ts +4 -4
  226. package/src/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.ts +1 -1
  227. package/src/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.ts +1 -1
  228. package/src/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.ts +1 -1
  229. package/src/utils/EntityPrivacyUtils.ts +72 -30
  230. package/src/utils/{testing → __testfixtures__}/PrivacyPolicyRuleTestUtils.ts +26 -26
  231. package/src/{testfixtures → utils/__testfixtures__}/SimpleTestEntity.ts +16 -15
  232. package/src/utils/__testfixtures__/StubCacheAdapter.ts +164 -0
  233. package/src/utils/{testing → __testfixtures__}/StubDatabaseAdapter.ts +19 -12
  234. package/src/utils/{testing → __testfixtures__}/StubDatabaseAdapterProvider.ts +4 -4
  235. package/src/utils/__testfixtures__/TSMockitoExtensions.ts +69 -0
  236. package/src/{testfixtures → utils/__testfixtures__}/TestEntity.ts +21 -15
  237. package/src/{testfixtures → utils/__testfixtures__}/TestEntity2.ts +16 -15
  238. package/src/{testfixtures → utils/__testfixtures__}/TestEntityWithMutationTriggers.ts +23 -22
  239. package/src/{testfixtures → utils/__testfixtures__}/TestViewerContext.ts +1 -1
  240. package/src/utils/{testing → __testfixtures__}/describeFieldTestCase.ts +1 -1
  241. package/src/utils/__tests__/EntityPrivacyUtils-test.ts +81 -113
  242. package/src/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.ts +31 -30
  243. package/src/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.ts +1 -1
  244. package/src/utils/collections/SerializableKeyMap.ts +84 -0
  245. package/src/utils/collections/__tests__/SerializableKeyMap-test.ts +119 -0
  246. package/src/utils/collections/__tests__/sets-test.ts +17 -0
  247. package/src/utils/collections/maps.ts +7 -8
  248. package/src/utils/collections/sets.ts +3 -0
  249. package/src/utils/mergeEntityMutationTriggerConfigurations.ts +5 -5
  250. package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.d.ts +0 -1
  251. package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.js +0 -273
  252. package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.js.map +0 -1
  253. package/build/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.d.ts +0 -26
  254. package/build/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.js +0 -110
  255. package/build/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.js.map +0 -1
  256. package/build/__tests__/AuthorizationResultBasedEntityLoader-test.d.ts +0 -1
  257. package/build/__tests__/AuthorizationResultBasedEntityLoader-test.js +0 -401
  258. package/build/__tests__/AuthorizationResultBasedEntityLoader-test.js.map +0 -1
  259. package/build/__tests__/ComposedCacheAdapter-test.d.ts +0 -1
  260. package/build/__tests__/ComposedCacheAdapter-test.js +0 -229
  261. package/build/__tests__/ComposedCacheAdapter-test.js.map +0 -1
  262. package/build/__tests__/ComposedSecondaryEntityCache-test.d.ts +0 -1
  263. package/build/__tests__/ComposedSecondaryEntityCache-test.js +0 -66
  264. package/build/__tests__/ComposedSecondaryEntityCache-test.js.map +0 -1
  265. package/build/__tests__/EnforcingEntityAssociationLoader-test.d.ts +0 -1
  266. package/build/__tests__/EnforcingEntityAssociationLoader-test.js +0 -115
  267. package/build/__tests__/EnforcingEntityAssociationLoader-test.js.map +0 -1
  268. package/build/__tests__/EnforcingEntityLoader-test.d.ts +0 -1
  269. package/build/__tests__/EnforcingEntityLoader-test.js +0 -253
  270. package/build/__tests__/EnforcingEntityLoader-test.js.map +0 -1
  271. package/build/__tests__/Entity-test.d.ts +0 -1
  272. package/build/__tests__/Entity-test.js +0 -54
  273. package/build/__tests__/Entity-test.js.map +0 -1
  274. package/build/__tests__/EntityAssociationLoader-test.d.ts +0 -1
  275. package/build/__tests__/EntityAssociationLoader-test.js +0 -30
  276. package/build/__tests__/EntityAssociationLoader-test.js.map +0 -1
  277. package/build/__tests__/EntityCommonUseCases-test.d.ts +0 -1
  278. package/build/__tests__/EntityCommonUseCases-test.js +0 -154
  279. package/build/__tests__/EntityCommonUseCases-test.js.map +0 -1
  280. package/build/__tests__/EntityCompanion-test.d.ts +0 -1
  281. package/build/__tests__/EntityCompanion-test.js +0 -77
  282. package/build/__tests__/EntityCompanion-test.js.map +0 -1
  283. package/build/__tests__/EntityCompanionProvider-test.d.ts +0 -1
  284. package/build/__tests__/EntityCompanionProvider-test.js +0 -54
  285. package/build/__tests__/EntityCompanionProvider-test.js.map +0 -1
  286. package/build/__tests__/EntityConfiguration-test.d.ts +0 -1
  287. package/build/__tests__/EntityConfiguration-test.js +0 -103
  288. package/build/__tests__/EntityConfiguration-test.js.map +0 -1
  289. package/build/__tests__/EntityDatabaseAdapter-test.d.ts +0 -1
  290. package/build/__tests__/EntityDatabaseAdapter-test.js +0 -146
  291. package/build/__tests__/EntityDatabaseAdapter-test.js.map +0 -1
  292. package/build/__tests__/EntityEdges-test.d.ts +0 -1
  293. package/build/__tests__/EntityEdges-test.js +0 -755
  294. package/build/__tests__/EntityEdges-test.js.map +0 -1
  295. package/build/__tests__/EntityFields-test.d.ts +0 -1
  296. package/build/__tests__/EntityFields-test.js +0 -63
  297. package/build/__tests__/EntityFields-test.js.map +0 -1
  298. package/build/__tests__/EntityLoader-test.d.ts +0 -1
  299. package/build/__tests__/EntityLoader-test.js +0 -36
  300. package/build/__tests__/EntityLoader-test.js.map +0 -1
  301. package/build/__tests__/EntityMutator-MutationCacheConsistency-test.d.ts +0 -1
  302. package/build/__tests__/EntityMutator-MutationCacheConsistency-test.js +0 -77
  303. package/build/__tests__/EntityMutator-MutationCacheConsistency-test.js.map +0 -1
  304. package/build/__tests__/EntityMutator-test.d.ts +0 -1
  305. package/build/__tests__/EntityMutator-test.js +0 -741
  306. package/build/__tests__/EntityMutator-test.js.map +0 -1
  307. package/build/__tests__/EntityPrivacyPolicy-test.d.ts +0 -1
  308. package/build/__tests__/EntityPrivacyPolicy-test.js +0 -463
  309. package/build/__tests__/EntityPrivacyPolicy-test.js.map +0 -1
  310. package/build/__tests__/EntityQueryContext-test.d.ts +0 -1
  311. package/build/__tests__/EntityQueryContext-test.js +0 -116
  312. package/build/__tests__/EntityQueryContext-test.js.map +0 -1
  313. package/build/__tests__/EntitySecondaryCacheLoader-test.d.ts +0 -1
  314. package/build/__tests__/EntitySecondaryCacheLoader-test.js +0 -60
  315. package/build/__tests__/EntitySecondaryCacheLoader-test.js.map +0 -1
  316. package/build/__tests__/EntitySelfReferentialEdges-test.d.ts +0 -1
  317. package/build/__tests__/EntitySelfReferentialEdges-test.js +0 -247
  318. package/build/__tests__/EntitySelfReferentialEdges-test.js.map +0 -1
  319. package/build/__tests__/GenericEntityCacheAdapter-test.d.ts +0 -1
  320. package/build/__tests__/GenericEntityCacheAdapter-test.js +0 -80
  321. package/build/__tests__/GenericEntityCacheAdapter-test.js.map +0 -1
  322. package/build/__tests__/ReadonlyEntity-test.d.ts +0 -1
  323. package/build/__tests__/ReadonlyEntity-test.js +0 -178
  324. package/build/__tests__/ReadonlyEntity-test.js.map +0 -1
  325. package/build/__tests__/ViewerContext-test.d.ts +0 -1
  326. package/build/__tests__/ViewerContext-test.js +0 -30
  327. package/build/__tests__/ViewerContext-test.js.map +0 -1
  328. package/build/__tests__/ViewerScopedEntityCompanion-test.d.ts +0 -1
  329. package/build/__tests__/ViewerScopedEntityCompanion-test.js +0 -20
  330. package/build/__tests__/ViewerScopedEntityCompanion-test.js.map +0 -1
  331. package/build/__tests__/ViewerScopedEntityCompanionProvider-test.d.ts +0 -1
  332. package/build/__tests__/ViewerScopedEntityCompanionProvider-test.js +0 -20
  333. package/build/__tests__/ViewerScopedEntityCompanionProvider-test.js.map +0 -1
  334. package/build/__tests__/ViewerScopedEntityLoaderFactory-test.d.ts +0 -1
  335. package/build/__tests__/ViewerScopedEntityLoaderFactory-test.js +0 -23
  336. package/build/__tests__/ViewerScopedEntityLoaderFactory-test.js.map +0 -1
  337. package/build/__tests__/ViewerScopedEntityMutatorFactory-test.d.ts +0 -1
  338. package/build/__tests__/ViewerScopedEntityMutatorFactory-test.js +0 -22
  339. package/build/__tests__/ViewerScopedEntityMutatorFactory-test.js.map +0 -1
  340. package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.d.ts +0 -1
  341. package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js +0 -129
  342. package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js.map +0 -1
  343. package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.d.ts +0 -1
  344. package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js +0 -136
  345. package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js.map +0 -1
  346. package/build/__tests__/entityUtils-test.d.ts +0 -1
  347. package/build/__tests__/entityUtils-test.js +0 -87
  348. package/build/__tests__/entityUtils-test.js.map +0 -1
  349. package/build/internal/__tests__/EntityDataManager-test.d.ts +0 -1
  350. package/build/internal/__tests__/EntityDataManager-test.js +0 -373
  351. package/build/internal/__tests__/EntityDataManager-test.js.map +0 -1
  352. package/build/internal/__tests__/EntityFieldTransformationUtils-test.d.ts +0 -1
  353. package/build/internal/__tests__/EntityFieldTransformationUtils-test.js +0 -136
  354. package/build/internal/__tests__/EntityFieldTransformationUtils-test.js.map +0 -1
  355. package/build/internal/__tests__/ReadThroughEntityCache-test.d.ts +0 -1
  356. package/build/internal/__tests__/ReadThroughEntityCache-test.js +0 -206
  357. package/build/internal/__tests__/ReadThroughEntityCache-test.js.map +0 -1
  358. package/build/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.d.ts +0 -1
  359. package/build/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.js +0 -21
  360. package/build/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.js.map +0 -1
  361. package/build/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.d.ts +0 -1
  362. package/build/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.js +0 -21
  363. package/build/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.js.map +0 -1
  364. package/build/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.d.ts +0 -1
  365. package/build/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.js +0 -21
  366. package/build/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.js.map +0 -1
  367. package/build/testfixtures/DateIDTestEntity.d.ts +0 -19
  368. package/build/testfixtures/DateIDTestEntity.js +0 -48
  369. package/build/testfixtures/DateIDTestEntity.js.map +0 -1
  370. package/build/testfixtures/SimpleTestEntity.d.ts +0 -20
  371. package/build/testfixtures/SimpleTestEntity.js +0 -48
  372. package/build/testfixtures/SimpleTestEntity.js.map +0 -1
  373. package/build/testfixtures/TestEntity.d.ts +0 -30
  374. package/build/testfixtures/TestEntity.js +0 -93
  375. package/build/testfixtures/TestEntity.js.map +0 -1
  376. package/build/testfixtures/TestEntity2.d.ts +0 -20
  377. package/build/testfixtures/TestEntity2.js +0 -51
  378. package/build/testfixtures/TestEntity2.js.map +0 -1
  379. package/build/testfixtures/TestEntityNumberKey.d.ts +0 -19
  380. package/build/testfixtures/TestEntityNumberKey.js +0 -48
  381. package/build/testfixtures/TestEntityNumberKey.js.map +0 -1
  382. package/build/testfixtures/TestEntityWithMutationTriggers.d.ts +0 -36
  383. package/build/testfixtures/TestEntityWithMutationTriggers.js +0 -82
  384. package/build/testfixtures/TestEntityWithMutationTriggers.js.map +0 -1
  385. package/build/testfixtures/TestViewerContext.d.ts +0 -3
  386. package/build/testfixtures/TestViewerContext.js +0 -10
  387. package/build/testfixtures/TestViewerContext.js.map +0 -1
  388. package/build/utils/__tests__/EntityPrivacyUtils-test.d.ts +0 -1
  389. package/build/utils/__tests__/EntityPrivacyUtils-test.js +0 -520
  390. package/build/utils/__tests__/EntityPrivacyUtils-test.js.map +0 -1
  391. package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.d.ts +0 -1
  392. package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.js +0 -181
  393. package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.js.map +0 -1
  394. package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.d.ts +0 -1
  395. package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.js +0 -26
  396. package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.js.map +0 -1
  397. package/build/utils/collections/__tests__/maps-test.d.ts +0 -1
  398. package/build/utils/collections/__tests__/maps-test.js +0 -120
  399. package/build/utils/collections/__tests__/maps-test.js.map +0 -1
  400. package/build/utils/testing/PrivacyPolicyRuleTestUtils.d.ts +0 -28
  401. package/build/utils/testing/PrivacyPolicyRuleTestUtils.js +0 -52
  402. package/build/utils/testing/PrivacyPolicyRuleTestUtils.js.map +0 -1
  403. package/build/utils/testing/StubCacheAdapter.d.ts +0 -27
  404. package/build/utils/testing/StubCacheAdapter.js +0 -86
  405. package/build/utils/testing/StubCacheAdapter.js.map +0 -1
  406. package/build/utils/testing/StubDatabaseAdapter.d.ts +0 -25
  407. package/build/utils/testing/StubDatabaseAdapter.js +0 -191
  408. package/build/utils/testing/StubDatabaseAdapter.js.map +0 -1
  409. package/build/utils/testing/StubDatabaseAdapterProvider.d.ts +0 -7
  410. package/build/utils/testing/StubDatabaseAdapterProvider.js +0 -14
  411. package/build/utils/testing/StubDatabaseAdapterProvider.js.map +0 -1
  412. package/build/utils/testing/StubQueryContextProvider.d.ts +0 -7
  413. package/build/utils/testing/StubQueryContextProvider.js +0 -19
  414. package/build/utils/testing/StubQueryContextProvider.js.map +0 -1
  415. package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.d.ts +0 -1
  416. package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.js +0 -42
  417. package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.js.map +0 -1
  418. package/build/utils/testing/__tests__/StubDatabaseAdapter-test.d.ts +0 -1
  419. package/build/utils/testing/__tests__/StubDatabaseAdapter-test.js +0 -402
  420. package/build/utils/testing/__tests__/StubDatabaseAdapter-test.js.map +0 -1
  421. package/build/utils/testing/createUnitTestEntityCompanionProvider.d.ts +0 -7
  422. package/build/utils/testing/createUnitTestEntityCompanionProvider.js +0 -36
  423. package/build/utils/testing/createUnitTestEntityCompanionProvider.js.map +0 -1
  424. package/build/utils/testing/describeFieldTestCase.d.ts +0 -2
  425. package/build/utils/testing/describeFieldTestCase.js +0 -18
  426. package/build/utils/testing/describeFieldTestCase.js.map +0 -1
  427. package/src/testfixtures/DateIDTestEntity.ts +0 -59
  428. package/src/testfixtures/TestEntityNumberKey.ts +0 -59
  429. package/src/utils/testing/StubCacheAdapter.ts +0 -122
  430. package/src/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.ts +0 -42
  431. package/src/utils/testing/__tests__/StubDatabaseAdapter-test.ts +0 -548
  432. /package/src/utils/{testing → __testfixtures__}/StubQueryContextProvider.ts +0 -0
  433. /package/src/utils/{testing → __testfixtures__}/createUnitTestEntityCompanionProvider.ts +0 -0
@@ -1,4 +1,8 @@
1
- import { EntityFieldDefinition } from './EntityFieldDefinition';
1
+ import {
2
+ EntityFieldDefinition,
3
+ EntityFieldDefinitionOptions,
4
+ EntityFieldDefinitionOptionsExplicitCache,
5
+ } from './EntityFieldDefinition';
2
6
 
3
7
  // Use our own regex since the `uuid` package doesn't support validating UUIDv6/7/8 yet
4
8
  const UUID_REGEX =
@@ -7,7 +11,10 @@ const UUID_REGEX =
7
11
  /**
8
12
  * EntityFieldDefinition for a column with a JS string type.
9
13
  */
10
- export class StringField extends EntityFieldDefinition<string> {
14
+ export class StringField<TRequireExplicitCache extends boolean> extends EntityFieldDefinition<
15
+ string,
16
+ TRequireExplicitCache
17
+ > {
11
18
  protected validateInputValueInternal(value: string): boolean {
12
19
  return typeof value === 'string';
13
20
  }
@@ -17,7 +24,9 @@ export class StringField extends EntityFieldDefinition<string> {
17
24
  * EntityFieldDefinition for a column with a JS string type.
18
25
  * Enforces that the string is a valid UUID.
19
26
  */
20
- export class UUIDField extends StringField {
27
+ export class UUIDField<
28
+ TRequireExplicitCache extends boolean,
29
+ > extends StringField<TRequireExplicitCache> {
21
30
  protected override validateInputValueInternal(value: string): boolean {
22
31
  return super.validateInputValueInternal(value) && UUID_REGEX.test(value);
23
32
  }
@@ -26,7 +35,10 @@ export class UUIDField extends StringField {
26
35
  /**
27
36
  * EntityFieldDefinition for a column with a JS Date type.
28
37
  */
29
- export class DateField extends EntityFieldDefinition<Date> {
38
+ export class DateField<TRequireExplicitCache extends boolean> extends EntityFieldDefinition<
39
+ Date,
40
+ TRequireExplicitCache
41
+ > {
30
42
  protected validateInputValueInternal(value: Date): boolean {
31
43
  return value instanceof Date;
32
44
  }
@@ -35,7 +47,10 @@ export class DateField extends EntityFieldDefinition<Date> {
35
47
  /**
36
48
  * EntityFieldDefinition for a column with a JS boolean type.
37
49
  */
38
- export class BooleanField extends EntityFieldDefinition<boolean> {
50
+ export class BooleanField<TRequireExplicitCache extends boolean> extends EntityFieldDefinition<
51
+ boolean,
52
+ TRequireExplicitCache
53
+ > {
39
54
  protected validateInputValueInternal(value: boolean): boolean {
40
55
  return typeof value === 'boolean';
41
56
  }
@@ -45,7 +60,10 @@ export class BooleanField extends EntityFieldDefinition<boolean> {
45
60
  * EntityFieldDefinition for a column with a JS number type.
46
61
  * Enforces that the number is an integer.
47
62
  */
48
- export class IntField extends EntityFieldDefinition<number> {
63
+ export class IntField<TRequireExplicitCache extends boolean> extends EntityFieldDefinition<
64
+ number,
65
+ TRequireExplicitCache
66
+ > {
49
67
  protected validateInputValueInternal(value: number): boolean {
50
68
  return typeof value === 'number' && Number.isInteger(value);
51
69
  }
@@ -55,7 +73,10 @@ export class IntField extends EntityFieldDefinition<number> {
55
73
  * EntityFieldDefinition for a column with a JS number type.
56
74
  * Enforces that the number is a float (which includes integers in JS).
57
75
  */
58
- export class FloatField extends EntityFieldDefinition<number> {
76
+ export class FloatField<TRequireExplicitCache extends boolean> extends EntityFieldDefinition<
77
+ number,
78
+ TRequireExplicitCache
79
+ > {
59
80
  protected validateInputValueInternal(value: number): boolean {
60
81
  return typeof value === 'number';
61
82
  }
@@ -65,7 +86,10 @@ export class FloatField extends EntityFieldDefinition<number> {
65
86
  * EntityFieldDefinition for a column with a JS string array type.
66
87
  * Enforces that every member of the string array is a string.
67
88
  */
68
- export class StringArrayField extends EntityFieldDefinition<string[]> {
89
+ export class StringArrayField<TRequireExplicitCache extends boolean> extends EntityFieldDefinition<
90
+ string[],
91
+ TRequireExplicitCache
92
+ > {
69
93
  protected validateInputValueInternal(value: string[]): boolean {
70
94
  return Array.isArray(value) && value.every((subValue) => typeof subValue === 'string');
71
95
  }
@@ -74,7 +98,10 @@ export class StringArrayField extends EntityFieldDefinition<string[]> {
74
98
  /**
75
99
  * EntityFieldDefinition for a column with a JS JSON object type.
76
100
  */
77
- export class JSONObjectField extends EntityFieldDefinition<object> {
101
+ export class JSONObjectField<TRequireExplicitCache extends boolean> extends EntityFieldDefinition<
102
+ object,
103
+ TRequireExplicitCache
104
+ > {
78
105
  protected validateInputValueInternal(value: object): boolean {
79
106
  return typeof value === 'object' && !Array.isArray(value);
80
107
  }
@@ -83,7 +110,10 @@ export class JSONObjectField extends EntityFieldDefinition<object> {
83
110
  /**
84
111
  * EntityFieldDefinition for a enum column with a JS string or number type.
85
112
  */
86
- export class EnumField extends EntityFieldDefinition<string | number> {
113
+ export class EnumField<TRequireExplicitCache extends boolean> extends EntityFieldDefinition<
114
+ string | number,
115
+ TRequireExplicitCache
116
+ > {
87
117
  protected validateInputValueInternal(value: string | number): boolean {
88
118
  return typeof value === 'number' || typeof value === 'string';
89
119
  }
@@ -92,9 +122,16 @@ export class EnumField extends EntityFieldDefinition<string | number> {
92
122
  /**
93
123
  * EntityFieldDefinition for a enum column with a strict typescript enum type.
94
124
  */
95
- export class StrictEnumField<T extends object> extends EnumField {
125
+ export class StrictEnumField<
126
+ T extends object,
127
+ TRequireExplicitCache extends boolean,
128
+ > extends EnumField<TRequireExplicitCache> {
96
129
  private readonly enum: T;
97
- constructor(options: ConstructorParameters<typeof EnumField>[0] & { enum: T }) {
130
+ constructor(
131
+ options: TRequireExplicitCache extends true
132
+ ? EntityFieldDefinitionOptionsExplicitCache & { enum: T }
133
+ : EntityFieldDefinitionOptions & { enum: T },
134
+ ) {
98
135
  super(options);
99
136
  this.enum = options.enum;
100
137
  }
@@ -12,14 +12,14 @@ import ViewerContext from './ViewerContext';
12
12
  * cached, and authorized against the entity's EntityPrivacyPolicy.
13
13
  */
14
14
  export default class EntityLoader<
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
18
  TViewerContext2 extends TViewerContext,
19
- TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>,
19
+ TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
20
20
  TPrivacyPolicy extends EntityPrivacyPolicy<
21
21
  TFields,
22
- TID,
22
+ TIDField,
23
23
  TViewerContext,
24
24
  TEntity,
25
25
  TSelectedFields
@@ -31,7 +31,7 @@ export default class EntityLoader<
31
31
  private readonly queryContext: EntityQueryContext,
32
32
  private readonly entityClass: IEntityClass<
33
33
  TFields,
34
- TID,
34
+ TIDField,
35
35
  TViewerContext,
36
36
  TEntity,
37
37
  TPrivacyPolicy,
@@ -46,7 +46,7 @@ export default class EntityLoader<
46
46
  */
47
47
  enforcing(): EnforcingEntityLoader<
48
48
  TFields,
49
- TID,
49
+ TIDField,
50
50
  TViewerContext,
51
51
  TEntity,
52
52
  TPrivacyPolicy,
@@ -62,7 +62,7 @@ export default class EntityLoader<
62
62
  */
63
63
  withAuthorizationResults(): AuthorizationResultBasedEntityLoader<
64
64
  TFields,
65
- TID,
65
+ TIDField,
66
66
  TViewerContext,
67
67
  TEntity,
68
68
  TPrivacyPolicy,
@@ -80,7 +80,7 @@ export default class EntityLoader<
80
80
  */
81
81
  public utils(): EntityLoaderUtils<
82
82
  TFields,
83
- TID,
83
+ TIDField,
84
84
  TViewerContext,
85
85
  TEntity,
86
86
  TPrivacyPolicy,
@@ -12,13 +12,13 @@ import IEntityMetricsAdapter from './metrics/IEntityMetricsAdapter';
12
12
  * The primary entry point for loading entities.
13
13
  */
14
14
  export default class EntityLoaderFactory<
15
- TFields extends object,
16
- TID extends NonNullable<TFields[TSelectedFields]>,
15
+ TFields extends Record<string, any>,
16
+ TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
17
17
  TViewerContext extends ViewerContext,
18
- TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>,
18
+ TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
19
19
  TPrivacyPolicy extends EntityPrivacyPolicy<
20
20
  TFields,
21
- TID,
21
+ TIDField,
22
22
  TViewerContext,
23
23
  TEntity,
24
24
  TSelectedFields
@@ -28,13 +28,13 @@ export default class EntityLoaderFactory<
28
28
  constructor(
29
29
  private readonly entityCompanion: EntityCompanion<
30
30
  TFields,
31
- TID,
31
+ TIDField,
32
32
  TViewerContext,
33
33
  TEntity,
34
34
  TPrivacyPolicy,
35
35
  TSelectedFields
36
36
  >,
37
- private readonly dataManager: EntityDataManager<TFields>,
37
+ private readonly dataManager: EntityDataManager<TFields, TIDField>,
38
38
  protected readonly metricsAdapter: IEntityMetricsAdapter,
39
39
  ) {}
40
40
 
@@ -48,14 +48,14 @@ export default class EntityLoaderFactory<
48
48
  queryContext: EntityQueryContext,
49
49
  privacyPolicyEvaluationContext: EntityPrivacyPolicyEvaluationContext<
50
50
  TFields,
51
- TID,
51
+ TIDField,
52
52
  TViewerContext,
53
53
  TEntity,
54
54
  TSelectedFields
55
55
  >,
56
56
  ): AuthorizationResultBasedEntityLoader<
57
57
  TFields,
58
- TID,
58
+ TIDField,
59
59
  TViewerContext,
60
60
  TEntity,
61
61
  TPrivacyPolicy,
@@ -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,