@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
package/src/Entity.ts CHANGED
@@ -1,3 +1,11 @@
1
+ import {
2
+ AuthorizationResultBasedCreateMutator,
3
+ AuthorizationResultBasedDeleteMutator,
4
+ AuthorizationResultBasedUpdateMutator,
5
+ } from './AuthorizationResultBasedEntityMutator';
6
+ import EnforcingEntityCreator from './EnforcingEntityCreator';
7
+ import EnforcingEntityDeleter from './EnforcingEntityDeleter';
8
+ import EnforcingEntityUpdater from './EnforcingEntityUpdater';
1
9
  import { EntityCompanionDefinition } from './EntityCompanionProvider';
2
10
  import EntityCreator from './EntityCreator';
3
11
  import EntityDeleter from './EntityDeleter';
@@ -26,11 +34,11 @@ import ViewerContext from './ViewerContext';
26
34
  * own EntityCompanionDefinition.
27
35
  */
28
36
  export default abstract class Entity<
29
- TFields extends object,
30
- TID extends NonNullable<TFields[TSelectedFields]>,
37
+ TFields extends Record<string, any>,
38
+ TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
31
39
  TViewerContext extends ViewerContext,
32
40
  TSelectedFields extends keyof TFields = keyof TFields,
33
- > extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields> {
41
+ > extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields> {
34
42
  /**
35
43
  * Vend mutator for creating a new entity in given query context.
36
44
  * @param viewerContext - viewer context of creating user
@@ -39,13 +47,13 @@ export default abstract class Entity<
39
47
  */
40
48
  static creator<
41
49
  TMFields extends object,
42
- TMID extends NonNullable<TMFields[TMSelectedFields]>,
50
+ TMIDField extends keyof NonNullable<Pick<TMFields, TMSelectedFields>>,
43
51
  TMViewerContext extends ViewerContext,
44
52
  TMViewerContext2 extends TMViewerContext,
45
- TMEntity extends Entity<TMFields, TMID, TMViewerContext, TMSelectedFields>,
53
+ TMEntity extends Entity<TMFields, TMIDField, TMViewerContext, TMSelectedFields>,
46
54
  TMPrivacyPolicy extends EntityPrivacyPolicy<
47
55
  TMFields,
48
- TMID,
56
+ TMIDField,
49
57
  TMViewerContext,
50
58
  TMEntity,
51
59
  TMSelectedFields
@@ -54,7 +62,7 @@ export default abstract class Entity<
54
62
  >(
55
63
  this: IEntityClass<
56
64
  TMFields,
57
- TMID,
65
+ TMIDField,
58
66
  TMViewerContext,
59
67
  TMEntity,
60
68
  TMPrivacyPolicy,
@@ -65,16 +73,60 @@ export default abstract class Entity<
65
73
  .getViewerScopedEntityCompanionForClass(this)
66
74
  .getQueryContextProvider()
67
75
  .getQueryContext(),
68
- ): EntityCreator<
76
+ ): EnforcingEntityCreator<
69
77
  TMFields,
70
- TMID,
78
+ TMIDField,
71
79
  TMViewerContext,
72
- TMViewerContext2,
73
80
  TMEntity,
74
81
  TMPrivacyPolicy,
75
82
  TMSelectedFields
76
83
  > {
77
- return new EntityCreator(viewerContext, queryContext, this);
84
+ return new EntityCreator(viewerContext, queryContext, this).enforcing();
85
+ }
86
+
87
+ /**
88
+ * Vend mutator for creating a new entity in given query context.
89
+ * @param viewerContext - viewer context of creating user
90
+ * @param queryContext - query context in which to perform the create
91
+ * @returns mutator for creating an entity
92
+ */
93
+ static creatorWithAuthorizationResults<
94
+ TMFields extends object,
95
+ TMIDField extends keyof NonNullable<Pick<TMFields, TMSelectedFields>>,
96
+ TMViewerContext extends ViewerContext,
97
+ TMViewerContext2 extends TMViewerContext,
98
+ TMEntity extends Entity<TMFields, TMIDField, TMViewerContext, TMSelectedFields>,
99
+ TMPrivacyPolicy extends EntityPrivacyPolicy<
100
+ TMFields,
101
+ TMIDField,
102
+ TMViewerContext,
103
+ TMEntity,
104
+ TMSelectedFields
105
+ >,
106
+ TMSelectedFields extends keyof TMFields = keyof TMFields,
107
+ >(
108
+ this: IEntityClass<
109
+ TMFields,
110
+ TMIDField,
111
+ TMViewerContext,
112
+ TMEntity,
113
+ TMPrivacyPolicy,
114
+ TMSelectedFields
115
+ >,
116
+ viewerContext: TMViewerContext2,
117
+ queryContext: EntityQueryContext = viewerContext
118
+ .getViewerScopedEntityCompanionForClass(this)
119
+ .getQueryContextProvider()
120
+ .getQueryContext(),
121
+ ): AuthorizationResultBasedCreateMutator<
122
+ TMFields,
123
+ TMIDField,
124
+ TMViewerContext,
125
+ TMEntity,
126
+ TMPrivacyPolicy,
127
+ TMSelectedFields
128
+ > {
129
+ return new EntityCreator(viewerContext, queryContext, this).withAuthorizationResults();
78
130
  }
79
131
 
80
132
  /**
@@ -85,12 +137,12 @@ export default abstract class Entity<
85
137
  */
86
138
  static updater<
87
139
  TMFields extends object,
88
- TMID extends NonNullable<TMFields[TMSelectedFields]>,
140
+ TMIDField extends keyof NonNullable<Pick<TMFields, TMSelectedFields>>,
89
141
  TMViewerContext extends ViewerContext,
90
- TMEntity extends Entity<TMFields, TMID, TMViewerContext, TMSelectedFields>,
142
+ TMEntity extends Entity<TMFields, TMIDField, TMViewerContext, TMSelectedFields>,
91
143
  TMPrivacyPolicy extends EntityPrivacyPolicy<
92
144
  TMFields,
93
- TMID,
145
+ TMIDField,
94
146
  TMViewerContext,
95
147
  TMEntity,
96
148
  TMSelectedFields
@@ -99,7 +151,7 @@ export default abstract class Entity<
99
151
  >(
100
152
  this: IEntityClass<
101
153
  TMFields,
102
- TMID,
154
+ TMIDField,
103
155
  TMViewerContext,
104
156
  TMEntity,
105
157
  TMPrivacyPolicy,
@@ -111,8 +163,60 @@ export default abstract class Entity<
111
163
  .getViewerScopedEntityCompanionForClass(this)
112
164
  .getQueryContextProvider()
113
165
  .getQueryContext(),
114
- ): EntityUpdater<TMFields, TMID, TMViewerContext, TMEntity, TMPrivacyPolicy, TMSelectedFields> {
115
- return new EntityUpdater(existingEntity, queryContext, this);
166
+ ): EnforcingEntityUpdater<
167
+ TMFields,
168
+ TMIDField,
169
+ TMViewerContext,
170
+ TMEntity,
171
+ TMPrivacyPolicy,
172
+ TMSelectedFields
173
+ > {
174
+ return new EntityUpdater(existingEntity, queryContext, this).enforcing();
175
+ }
176
+
177
+ /**
178
+ * Vend mutator for updating an existing entity in given query context.
179
+ * @param existingEntity - entity to update
180
+ * @param queryContext - query context in which to perform the update
181
+ * @returns mutator for updating existingEntity
182
+ */
183
+ static updaterWithAuthorizationResults<
184
+ TMFields extends object,
185
+ TMIDField extends keyof NonNullable<Pick<TMFields, TMSelectedFields>>,
186
+ TMViewerContext extends ViewerContext,
187
+ TMEntity extends Entity<TMFields, TMIDField, TMViewerContext, TMSelectedFields>,
188
+ TMPrivacyPolicy extends EntityPrivacyPolicy<
189
+ TMFields,
190
+ TMIDField,
191
+ TMViewerContext,
192
+ TMEntity,
193
+ TMSelectedFields
194
+ >,
195
+ TMSelectedFields extends keyof TMFields = keyof TMFields,
196
+ >(
197
+ this: IEntityClass<
198
+ TMFields,
199
+ TMIDField,
200
+ TMViewerContext,
201
+ TMEntity,
202
+ TMPrivacyPolicy,
203
+ TMSelectedFields
204
+ >,
205
+ existingEntity: TMEntity,
206
+ queryContext: EntityQueryContext = existingEntity
207
+ .getViewerContext()
208
+ .getViewerScopedEntityCompanionForClass(this)
209
+ .getQueryContextProvider()
210
+ .getQueryContext(),
211
+ ): AuthorizationResultBasedUpdateMutator<
212
+ TMFields,
213
+ TMIDField,
214
+ TMViewerContext,
215
+ TMEntity,
216
+ TMPrivacyPolicy,
217
+ TMSelectedFields
218
+ > {
219
+ return new EntityUpdater(existingEntity, queryContext, this).withAuthorizationResults();
116
220
  }
117
221
 
118
222
  /**
@@ -123,12 +227,12 @@ export default abstract class Entity<
123
227
  */
124
228
  static deleter<
125
229
  TMFields extends object,
126
- TMID extends NonNullable<TMFields[TMSelectedFields]>,
230
+ TMIDField extends keyof NonNullable<Pick<TMFields, TMSelectedFields>>,
127
231
  TMViewerContext extends ViewerContext,
128
- TMEntity extends Entity<TMFields, TMID, TMViewerContext, TMSelectedFields>,
232
+ TMEntity extends Entity<TMFields, TMIDField, TMViewerContext, TMSelectedFields>,
129
233
  TMPrivacyPolicy extends EntityPrivacyPolicy<
130
234
  TMFields,
131
- TMID,
235
+ TMIDField,
132
236
  TMViewerContext,
133
237
  TMEntity,
134
238
  TMSelectedFields
@@ -137,7 +241,7 @@ export default abstract class Entity<
137
241
  >(
138
242
  this: IEntityClass<
139
243
  TMFields,
140
- TMID,
244
+ TMIDField,
141
245
  TMViewerContext,
142
246
  TMEntity,
143
247
  TMPrivacyPolicy,
@@ -149,8 +253,60 @@ export default abstract class Entity<
149
253
  .getViewerScopedEntityCompanionForClass(this)
150
254
  .getQueryContextProvider()
151
255
  .getQueryContext(),
152
- ): EntityDeleter<TMFields, TMID, TMViewerContext, TMEntity, TMPrivacyPolicy, TMSelectedFields> {
153
- return new EntityDeleter(existingEntity, queryContext, this);
256
+ ): EnforcingEntityDeleter<
257
+ TMFields,
258
+ TMIDField,
259
+ TMViewerContext,
260
+ TMEntity,
261
+ TMPrivacyPolicy,
262
+ TMSelectedFields
263
+ > {
264
+ return new EntityDeleter(existingEntity, queryContext, this).enforcing();
265
+ }
266
+
267
+ /**
268
+ * Vend mutator for deleting an existing entity in given query context.
269
+ * @param existingEntity - entity to delete
270
+ * @param queryContext - query context in which to perform the delete
271
+ * @returns mutator for deleting existingEntity
272
+ */
273
+ static deleterWithAuthorizationResults<
274
+ TMFields extends object,
275
+ TMIDField extends keyof NonNullable<Pick<TMFields, TMSelectedFields>>,
276
+ TMViewerContext extends ViewerContext,
277
+ TMEntity extends Entity<TMFields, TMIDField, TMViewerContext, TMSelectedFields>,
278
+ TMPrivacyPolicy extends EntityPrivacyPolicy<
279
+ TMFields,
280
+ TMIDField,
281
+ TMViewerContext,
282
+ TMEntity,
283
+ TMSelectedFields
284
+ >,
285
+ TMSelectedFields extends keyof TMFields = keyof TMFields,
286
+ >(
287
+ this: IEntityClass<
288
+ TMFields,
289
+ TMIDField,
290
+ TMViewerContext,
291
+ TMEntity,
292
+ TMPrivacyPolicy,
293
+ TMSelectedFields
294
+ >,
295
+ existingEntity: TMEntity,
296
+ queryContext: EntityQueryContext = existingEntity
297
+ .getViewerContext()
298
+ .getViewerScopedEntityCompanionForClass(this)
299
+ .getQueryContextProvider()
300
+ .getQueryContext(),
301
+ ): AuthorizationResultBasedDeleteMutator<
302
+ TMFields,
303
+ TMIDField,
304
+ TMViewerContext,
305
+ TMEntity,
306
+ TMPrivacyPolicy,
307
+ TMSelectedFields
308
+ > {
309
+ return new EntityDeleter(existingEntity, queryContext, this).withAuthorizationResults();
154
310
  }
155
311
  }
156
312
 
@@ -158,13 +314,13 @@ export default abstract class Entity<
158
314
  * An interface to pass in constructor (class) of an Entity as a function argument.
159
315
  */
160
316
  export interface IEntityClass<
161
- TFields extends object,
162
- TID extends NonNullable<TFields[TSelectedFields]>,
317
+ TFields extends Record<string, any>,
318
+ TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
163
319
  TViewerContext extends ViewerContext,
164
- TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>,
320
+ TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
165
321
  TPrivacyPolicy extends EntityPrivacyPolicy<
166
322
  TFields,
167
- TID,
323
+ TIDField,
168
324
  TViewerContext,
169
325
  TEntity,
170
326
  TSelectedFields
@@ -173,7 +329,7 @@ export interface IEntityClass<
173
329
  > {
174
330
  new (constructorParam: {
175
331
  viewerContext: TViewerContext;
176
- id: TID;
332
+ id: TFields[TIDField];
177
333
  databaseFields: Readonly<TFields>;
178
334
  selectedFields: Readonly<Pick<TFields, TSelectedFields>>;
179
335
  }): TEntity;
@@ -185,7 +341,7 @@ export interface IEntityClass<
185
341
  */
186
342
  defineCompanionDefinition(): EntityCompanionDefinition<
187
343
  TFields,
188
- TID,
344
+ TIDField,
189
345
  TViewerContext,
190
346
  TEntity,
191
347
  TPrivacyPolicy,
@@ -11,10 +11,10 @@ import ViewerContext from './ViewerContext';
11
11
  * by foreign keys.
12
12
  */
13
13
  export default class EntityAssociationLoader<
14
- TFields extends object,
15
- TID extends NonNullable<TFields[TSelectedFields]>,
14
+ TFields extends Record<string, any>,
15
+ TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
16
16
  TViewerContext extends ViewerContext,
17
- TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>,
17
+ TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
18
18
  TSelectedFields extends keyof TFields,
19
19
  > {
20
20
  constructor(
@@ -24,7 +24,7 @@ export default class EntityAssociationLoader<
24
24
  .getViewerScopedEntityCompanionForClass(
25
25
  entity.constructor as IEntityClass<
26
26
  TFields,
27
- TID,
27
+ TIDField,
28
28
  TViewerContext,
29
29
  TEntity,
30
30
  any,
@@ -42,7 +42,7 @@ export default class EntityAssociationLoader<
42
42
  */
43
43
  enforcing(): EnforcingEntityAssociationLoader<
44
44
  TFields,
45
- TID,
45
+ TIDField,
46
46
  TViewerContext,
47
47
  TEntity,
48
48
  TSelectedFields
@@ -57,7 +57,7 @@ export default class EntityAssociationLoader<
57
57
  */
58
58
  withAuthorizationResults(): AuthorizationResultBasedEntityAssociationLoader<
59
59
  TFields,
60
- TID,
60
+ TIDField,
61
61
  TViewerContext,
62
62
  TEntity,
63
63
  TSelectedFields
@@ -17,13 +17,13 @@ export interface IPrivacyPolicyClass<TPrivacyPolicy> {
17
17
  * Composition root responsible for orchestrating setup of Entity mutators and loaders.
18
18
  */
19
19
  export default class EntityCompanion<
20
- TFields extends object,
21
- TID extends NonNullable<TFields[TSelectedFields]>,
20
+ TFields extends Record<string, any>,
21
+ TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
22
22
  TViewerContext extends ViewerContext,
23
- TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>,
23
+ TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
24
24
  TPrivacyPolicy extends EntityPrivacyPolicy<
25
25
  TFields,
26
- TID,
26
+ TIDField,
27
27
  TViewerContext,
28
28
  TEntity,
29
29
  TSelectedFields
@@ -34,7 +34,7 @@ export default class EntityCompanion<
34
34
 
35
35
  private readonly entityLoaderFactory: EntityLoaderFactory<
36
36
  TFields,
37
- TID,
37
+ TIDField,
38
38
  TViewerContext,
39
39
  TEntity,
40
40
  TPrivacyPolicy,
@@ -42,7 +42,7 @@ export default class EntityCompanion<
42
42
  >;
43
43
  private readonly entityMutatorFactory: EntityMutatorFactory<
44
44
  TFields,
45
- TID,
45
+ TIDField,
46
46
  TViewerContext,
47
47
  TEntity,
48
48
  TPrivacyPolicy,
@@ -53,19 +53,19 @@ export default class EntityCompanion<
53
53
  public readonly entityCompanionProvider: EntityCompanionProvider,
54
54
  public readonly entityCompanionDefinition: EntityCompanionDefinition<
55
55
  TFields,
56
- TID,
56
+ TIDField,
57
57
  TViewerContext,
58
58
  TEntity,
59
59
  TPrivacyPolicy,
60
60
  TSelectedFields
61
61
  >,
62
- private readonly tableDataCoordinator: EntityTableDataCoordinator<TFields>,
62
+ private readonly tableDataCoordinator: EntityTableDataCoordinator<TFields, TIDField>,
63
63
  private readonly metricsAdapter: IEntityMetricsAdapter,
64
64
  ) {
65
65
  this.privacyPolicy = new entityCompanionDefinition.privacyPolicyClass();
66
66
  this.entityLoaderFactory = new EntityLoaderFactory<
67
67
  TFields,
68
- TID,
68
+ TIDField,
69
69
  TViewerContext,
70
70
  TEntity,
71
71
  TPrivacyPolicy,
@@ -89,7 +89,7 @@ export default class EntityCompanion<
89
89
 
90
90
  getLoaderFactory(): EntityLoaderFactory<
91
91
  TFields,
92
- TID,
92
+ TIDField,
93
93
  TViewerContext,
94
94
  TEntity,
95
95
  TPrivacyPolicy,
@@ -100,7 +100,7 @@ export default class EntityCompanion<
100
100
 
101
101
  getMutatorFactory(): EntityMutatorFactory<
102
102
  TFields,
103
- TID,
103
+ TIDField,
104
104
  TViewerContext,
105
105
  TEntity,
106
106
  TPrivacyPolicy,
@@ -50,13 +50,13 @@ export interface CacheAdapterFlavorDefinition {
50
50
  * used to power the entity framework for a particular type of entity.
51
51
  */
52
52
  export interface EntityCompanionDefinition<
53
- TFields extends object,
54
- TID extends NonNullable<TFields[TSelectedFields]>,
53
+ TFields extends Record<string, any>,
54
+ TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
55
55
  TViewerContext extends ViewerContext,
56
- TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>,
56
+ TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
57
57
  TPrivacyPolicy extends EntityPrivacyPolicy<
58
58
  TFields,
59
- TID,
59
+ TIDField,
60
60
  TViewerContext,
61
61
  TEntity,
62
62
  TSelectedFields
@@ -68,7 +68,7 @@ export interface EntityCompanionDefinition<
68
68
  */
69
69
  readonly entityClass: IEntityClass<
70
70
  TFields,
71
- TID,
71
+ TIDField,
72
72
  TViewerContext,
73
73
  TEntity,
74
74
  TPrivacyPolicy,
@@ -78,7 +78,7 @@ export interface EntityCompanionDefinition<
78
78
  /**
79
79
  * The EntityConfiguration for this entity.
80
80
  */
81
- readonly entityConfiguration: EntityConfiguration<TFields>;
81
+ readonly entityConfiguration: EntityConfiguration<TFields, TIDField>;
82
82
 
83
83
  /**
84
84
  * The EntityPrivacyPolicy class for this entity.
@@ -90,7 +90,7 @@ export interface EntityCompanionDefinition<
90
90
  */
91
91
  readonly mutationValidators?: EntityMutationValidator<
92
92
  TFields,
93
- TID,
93
+ TIDField,
94
94
  TViewerContext,
95
95
  TEntity,
96
96
  TSelectedFields
@@ -101,7 +101,7 @@ export interface EntityCompanionDefinition<
101
101
  */
102
102
  readonly mutationTriggers?: EntityMutationTriggerConfiguration<
103
103
  TFields,
104
- TID,
104
+ TIDField,
105
105
  TViewerContext,
106
106
  TEntity,
107
107
  TSelectedFields
@@ -131,7 +131,7 @@ export default class EntityCompanionProvider {
131
131
  > = new Map();
132
132
  private readonly companionMap: Map<string, EntityCompanion<any, any, any, any, any, any>> =
133
133
  new Map();
134
- private readonly tableDataCoordinatorMap: Map<string, EntityTableDataCoordinator<any>> =
134
+ private readonly tableDataCoordinatorMap: Map<string, EntityTableDataCoordinator<any, any>> =
135
135
  new Map();
136
136
 
137
137
  /**
@@ -167,13 +167,13 @@ export default class EntityCompanionProvider {
167
167
  * @param entityClass - entity class to load
168
168
  */
169
169
  getCompanionForEntity<
170
- TFields extends object,
171
- TID extends NonNullable<TFields[TSelectedFields]>,
170
+ TFields extends Record<string, any>,
171
+ TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
172
172
  TViewerContext extends ViewerContext,
173
- TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>,
173
+ TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
174
174
  TPrivacyPolicy extends EntityPrivacyPolicy<
175
175
  TFields,
176
- TID,
176
+ TIDField,
177
177
  TViewerContext,
178
178
  TEntity,
179
179
  TSelectedFields
@@ -182,13 +182,13 @@ export default class EntityCompanionProvider {
182
182
  >(
183
183
  entityClass: IEntityClass<
184
184
  TFields,
185
- TID,
185
+ TIDField,
186
186
  TViewerContext,
187
187
  TEntity,
188
188
  TPrivacyPolicy,
189
189
  TSelectedFields
190
190
  >,
191
- ): EntityCompanion<TFields, TID, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields> {
191
+ ): EntityCompanion<TFields, TIDField, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields> {
192
192
  const entityCompanionDefinition = computeIfAbsent(
193
193
  this.companionDefinitionMap,
194
194
  entityClass.name,
@@ -220,10 +220,13 @@ export default class EntityCompanionProvider {
220
220
  return entityDatabaseAdapterFlavor.queryContextProvider;
221
221
  }
222
222
 
223
- private getTableDataCoordinatorForEntity<TFields extends Record<string, any>>(
224
- entityConfiguration: EntityConfiguration<TFields>,
223
+ private getTableDataCoordinatorForEntity<
224
+ TFields extends Record<string, any>,
225
+ TIDField extends keyof TFields,
226
+ >(
227
+ entityConfiguration: EntityConfiguration<TFields, TIDField>,
225
228
  entityClassName: string,
226
- ): EntityTableDataCoordinator<TFields> {
229
+ ): EntityTableDataCoordinator<TFields, TIDField> {
227
230
  return computeIfAbsent(this.tableDataCoordinatorMap, entityConfiguration.tableName, () => {
228
231
  const entityDatabaseAdapterFlavor = this.databaseAdapterFlavors.get(
229
232
  entityConfiguration.databaseAdapterFlavor,